In the previous chapter, you learned how to connect to and get messages from RabbitMQ. Though receiving messages synchronously works perfectly, messages can be "pushed" from RabbitMQ directly to an application consumer for greater efficiency, as you'll discover in this chapter. In the process, you'll also learn how message consumers can either manually acknowledge messages or receive the messages without acknowledgements, the former allowing a zero-message loss design. Finally, you'll be acquainted with the fanout exchange, which routes messages to all queues bound to it, irrespective of the routing keys.
In this chapter, you will learn about the following topics: