Book Review – RabbitMQ Essentials
This book makes a departure from most of the RabbitMQ books that have been published in the last few years. Rather than tediously cover the API with simple examples this book has been aimed at changing your mind set on how to architect and code applications around a message based philosophy. This is an area that has been touched on by many books but not covered in any meaningful depth.
The coding examples use Java with a splattering of Ruby code, common in many RabbitMQ books, but this is not an impediment if you code in other languages as the methods and API are similar enough to enable even a novice developer to wade through the examples and build the example code in a different environment.
The book begins much like most introducing the technology and then introduces design solutions using some practical examples that can be used as a basis in production systems. Few programmers understand the message queue design and particularly how to restructure software to operate as separate modules using queues to push work in a loosely coupled orchestration, the examples presented do explain this reasonably well. I particularly like the chapter 4, using queuing to pass logs through. So many developers under use the power of real-time logging, something system administrators do everyday to determine faults and issues.
The book also does a good job of explaining all of the AMQP delivery concepts of distributing messages. It covers binding/routing of messages to queues, distributing message via different exchange types and shows how to use the tools provided (and some extra tools you can get) to assist in interactively debugging and developing your apps.
There is coverage of load testing, message pre-fetching and how to improve the performance of consumer application and the how to perform synchronous message interactions.
As the book progress more advanced level topics are covered, starting with different message types and delivery options and the design concepts of service-oriented messaging are covered as is advanced delivery with request response messages.
No RabbitMQ book is complete with out covering clustering and load balancing, and this is covered in sufficient depth in an easy to understand format. The author provide sample code to show how to connect to brokers within a cluster.
The book ends with a chapter dedicated to testing and tracing applications with coverage of tools to trace deeper under the hood of the AMQP protocol and the RabbitMQ broker.
To summarize the book, it reinforces the stability of the RabbitMQ technology as a platform for building production grade highly scalable distributed message driven systems once you get your mind around how software SHOULD be designed for the highly connected world we now live in.
The old monolithic system design and synchronous technologies of the past that most programmers have exposed to are superceeded by the message queue design philosophy, once you understand this book and the concepts explained in it you will change your ideas on how software interacts and how systems should be built.