One of the important design decisions that must be made when developing a corporate message bus is that (and how) the message bus must support implicit message ordering. By implicit order, I mean the ability to deliver messages in exactly the same order in which they were sent.
There are several options:
- Do not support implicit message ordering . Messages are not guaranteed to be delivered in the same order in which they were sent. Any business process that requires message ordering must provide an explicit order in each message. This option simplifies the message bus architecture, provides better scalability and recovery, and forces applications to accept explicit message ordering.
- You have an additional layer in the message bus (above the transport layer), which provides ordering of messages, only for those business processes that require it. This simplifies and scales the transport layer, but at the same time, if necessary, gives an advantage to the order of messages. This is a similar design for FIX (which provides ordering) and FIXT (which does not provide ordering).
- Build implicit ordering directly at the bus transport level. This eliminates the need for a separate level of ordering, but prevents scalability and recovery scenarios.
As a message bus architect or as a developer who can use a message bus, which option do you prefer and why?