Do I need another Bus library?

Hello,

I’m building an architecture where there is a flow of messages in input and output with the need to log and monitor any failure… I wonder if I can just set one or more Event Store instances (nodes?) and use them not only for Event Sourcing but also to notify any interested component for events or I need another library to dispatch events to and from the components…

At the moment I’m mixing a “Service bus” library with Event Store.

Is it correct or maybe I can reduce the infrastructure overhead refactoring the architecture and use separate Event Store instances?

Do you use other message oriented libraries to manage the flow between components and then do you rely on ES only to store events (with all the benefits of rebuilding your aggregates state and provide special projections for your read models)?

In other words, can I have the same features offered by other bus libraries like… centralized queue (stream with es I guess) for errors, automatic error logging features in case of failure, guarantee delivery (at least once), idem-potency and de-duplication using just Event Store?

Or I don’t have to bother myself with all this because the magic of storing transitions instead of current states it give me all of that on top of one central Event Store?

Thanks

Riccardo

"In other words, can I have the same features offered by other bus
libraries like... centralized queue (stream with es I guess) for
errors, automatic error logging features in case of failure, guarantee
delivery (at least once), idem-potency and de-duplication using just
Event Store?"

Yes idempotency/dedup is already built in. For the rest see competing
consumer stuff (handles retries/fan outs to multiple clients/and uses
a parked message stream if you tell it to park a message due to error
or number of retries to high etc).

Cheers,

Greg

Thanks. I’m reading the competing consumer stuff.

So the answer to my question “Do I need another library” is no, you don’t need. Better if you can use Event Store also to transport your messages between components using all the related message patterns that it provides other than just use it to save the transition of your data.

Can I say that maybe there is some lack of marketing message from GetEventStore to the developer community that has the effect that some people (I’m one of them) are building up some frankenstein architectures mixing libraries all together and adding infrastructure, maintenance, licence costs and learning overhead?

Cheers

Riccardo

Competing consumers is still pretty young (I wrote most of it around
this time last year->into the fall). There have been numerous changes
to it solidifying it etc. It will come out more on the marketing side
soon.