In this post I’ll discuss using RabbitMQ as a centralized service bus. RabbitMQ allows users to create a communication pipeline that enables loosely coupled processes to communicate asynchronously, scale with load, initiate system state changes, and report back on those changes as they occur. It’s a flexible system that, when used appropriately, can greatly enhance the speed and resiliency of complex systems. Message queuing systems are not, however, a magic bullet that should be applied to every situation. If you need a system that only performs synchronous actions, or you have a requirement to scale up (adding resources to the existing server) instead of scaling out (adding more servers to share processing load), then a message queue will just add a layer of complication without adding any benefit. With all that out of the way, let’s jump right in.