Does axonhub include axondb? When I want to use the hub for distributed communication and the db for storage and replay, how would a system be set up? Is there an example available?
Right now, these are two separate products, with AxonHub requiring AxonDB if you want to use AxonHub for distributing events. We are considering to integrate them more in the future, specifically for development purposes, to make set up easier.
The AxonHub + AxonDB set up looks like this:
- The application only connects to AxonHub, using this for commands, events and queries.
- Assuming you’re using axonhub-spring-boot-autoconfigure , this usually only requires a single property axoniq.axonhub.servers to be set in your application.properties.
- AxonHub talks to AxonDB for events.
- This is configured in the axonhub.properties file of AxonHub, through the setting axoniq.axondb.servers.
So a basic set-up running on your local machine is quite easy to configure: run AxonDB with all the defaults, run AxonHub with axoniq.axondb.servers=localhost, run your application with axonhub-spring-boot-autoconfigure included and set axoniq.axonhub.servers=localhost in application.properties.
at my company we’re currently loking into Axon Hub and one of my initial question was indeed about the relation with Axon DB.
As far as I understand from Frans van Buul reply I cannot use Axon Hub without Axon DB so both products need to be purchased together.
Is my understanding correct?
We currently have an architecture where several services are integrated using RabbitMQ as middleware.
Each single server relies on Axon framework to implement event sourcing. Our event store is a MySql database.
My initial idea when I read about Axon Hub was that it could be a replacement for RabbitMQ so to have a distributed events architecture that
relies exclusively on Axon. That means that all events (across systems) would be stored in 1 single data store which is the instance of AxonDB
connected to Axon HUB. Is my understanding correct?
Great to hear you’re looking into AxonHub.
The statement that you cannot use AxonHub with AxonDB is nearly correct, but to explain it precisely:
- AxonHub is a unified messaging platform for Commands, Events and Queries.
- AxonDB is a dedicated event store (and as such, can be used without AxonHub)
- AxonHub needs AxonDB if you want to use it for Events. In practice, most users of AxonHub will want to use it for multiple types of messages including Events. Therefore, practically, in most cases you would use AxonHub on conjunction with AxonDB.
- AxonHub can technically be used independently of AxonDB, but only for Commands and Queries. This is a somewhat theoretical use case.
When you would create a distributed events architecture across multiple applications, it could work exactly as you describe, with applications connecting to AxonHub and AxonHub connecting to a single AxonDB instance storing the events. An architecture like that would give you a number of benefits not available in a set-up with MySQL and RabbitMQ:
You would be able to distribute Command and Queries in addition to distributing Events.
All application components get the ability to do replays of events - something which is not possible over RabbitMQ.
AxonDB offers superior throughput and storage scalability compared to a MySQL-based event store.
Hope this is useful and clear. If not, I’m available for any follow up question either through this group or privately.