Modern enterprise systems often require collaboration of multiple internal and external systems.
The system must accept the fact that third-party systems may not be available or responsive at times and must build tolerances for such occurrences.
Queue-based System Architecture
In a queue-based system, the message is command to the receiver to do something; whereas in an event-driven system, the message is a notification to the subscriber that some system event has occurred.
A message defines a unit of work to be performed by the system.
The message may contain a version number for proper handling of the message by the system.
By its very nature, queue-based system architecture encourages separation of concerns and decoupling of subsystems.
QBSA employs the Command Query Responsibility Segregation (CQRS) pattern. In principle, CQRS states that a method should either change the state of an object, or return a result, but not both.
Commands change the state of the system; queries do not. As such we can scale query and command performance independently of each other.
Razzaq, S. (2014). Queue-based System Architecture: Build Scalable, Fault-tolerant Distributed Systems [Kindle Android version].