Just for fun (I mean, how much fun can you have with the following…), I am trying to implement a “axon-server-connector” for GO.
At this moment I am able to subscribe and send a basic query between my Java Spring Boot and Golang applications.
So basically I defined a query (GetUserByID), and I can “handle” it in both applications (so for example the Java app sends with the commandGateway the query request, and the golang app replies, and viceversa).
I understand that the concept of different connectors is not really needed because of axon-synapse. But I thought it could be a nice “side” project to understand better how axon works, and also use async programming and goroutines, etc in GO.
But now the real question, I struggled quite a lot to “follow” the flow of, for example how the subscription “process” works, so I make the following gRPC calls:
QueryProviderOutbound.Subscribe
QueryProviderInbound.Ack
And then when the actual query request is sent:
QueryProviderInbound.Query
QueryProviderInbound.QueryFlowControl
QueryProviderOutbound.QueryResponse
QueryProviderInbound.QueryCancel
I could not find documentation on what are the expected “steps” for each “process” (in this case the query subscription, but eventually all the processes related to commands and events). I’m wondering, is there any link to read about that?
First and foremost, I think it is super awesome that you’re making an Axon Server Connector in Go, @manuelarte! Over the years, there have been a couple of endeavors on this front. Furthermore, we did intentionally pull out the connector part from Axon Framework for this exact purpose: to make it feasible to construct connectors in other languages.
Let me move through the messages you were wondering about to give my insights about them:
QueryProviderInbound.Query - This is the query message sent by a client application to a query handler. This query is used for the point-to-point and scatter-gather query of Axon Framework.
QueryProviderInbound.QueryFlowControl - Used to tell that more updates of this query can be send.
QueryProviderOutbound.QueryResponse - This is the response of a point-to-point and scatter-gather query.
QueryProviderInbound.QueryCancel - Cancels the subscription.