One important design decision that needs to be made when designing a corporate message bus is whether (and how) the message bus should support implicit ordering of messages. By implicit ordering, I mean the ability to deliver messages in exactly the same order as they were sent.
There are several options:
- Don't support implicit message ordering at all. Messages are not guaranteeed to be delivered in the same order they were sent. Any business process that needs message ordering has to provide an explicit order within each message. This option simplifies message bus architecture, enables better scalability and recovery, and forces applications to adopt explicit message ordering.
- Have an optional layer in the message bus (above the transport layer) that provides messsage ordering only for those business processes that require it. This keeps the transport layer simple and scalable, but also gives the benefit of message order where appropriate. This is a similar design to FIX (which provides ordering) and FIXT (which doesn't provide ordering).
- Build implicit ordering directly into the transport layer of the bus. This removes the need for a separate ordering layer, but hinders scalability and recovery scenarios.
As an architect of a message bus, or as a developer who might use a message bus, which option do you prefer and why?