Using both EventStore as read model and RabbitMQ. When would you use which?


We are using both RabbitMQ and EventStore in our architecture of a new system and we are writing events to EventStore streams and using RabbitMQ to connect to another system.

  1. Is it appropriate when a service writes an event to an ES stream for another service to consume these events as commands like a persistent queue?

We are currently having the service diff what work it has already done with the last n days on startup before taking in new commands. One of our reasons for choosing ES is that we would like to be able to audit all of the messages sent throughout the new system, but are wondering whether we are overloading EventStore use for commands when we should be using our RabbitMQ as a ways to consume commands and acknowledge that work is done. If it helps each service’s domain can fit in memory and we are using the EventStore.JVM client.

  1. Would using EventStore for reading commands (or a re-playable persistent queue like Kafka) be misuse of ES until something like persistent subscriptions is available in 3.1.0? If you have both an MQ and ES when do you use which?

  2. Also is there a recommended way to do a not exists projection between 2 streams?

Thanks and I understand if you need more information.


Persistent subscriptions is totally ok to use today from dev. It is
intended for exactly the kinds of use cases you are discussing.

There will be a build out of it shortly.