Scenario.You have multiple publishers sending events (messages) to RabbitMQ (via EasyNetQ) about certain topics. They said they guarantee FIFO. They want to architect a system that guarantees "processing" of messages for a "topic" in order.
My solution:
Have a cache that holds a "version number" per topic and hold processing of the message if the sequence didn't match. You can retry processing of the message (time delayed retry) after the first event processing completes and updates the cache to the new target version. This means that the consumer is basically waiting on another consumer to complete processing. This works for things that take magnitudes of milliseconds not seconds as it's kind of a lock.Alternatively I said we could implement a holding table for events out of order like this http://blog.jonathanoliver.com/cqrs-out-of-sequence-messages-and-read-models/
The solution they said was to use a routing key and a direct exchange and have topics always go the same consumer. Kind of a sticky load balancing system.I pointed out that this limits the on demand scalability of the system as exchanges/bindings would need to be updated depending on the number of consumers up at any point in time.
--
You received this message because you are subscribed to the Google Groups "rabbitmq-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rabbitmq-users+unsubscribe@googlegroups.com.
To post to this group, send email to rabbitmq-users@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.