First of all i would be lying if i said that i did not like RabbitMQ :) It is a pretty cool piece of software. Having said that, i could be a bit biased in favor of the technology but i will try my best to be objective here.
RabbitMQ in Action is a really nice book. I think Alvaro Videla and Jason Williams did very good job at describing how to use and leverage RabbitMQ in your web applications.
Book covers different messaging patterns, explains routing and focuses quite a lot of high availability scenarios.
I liked the fact that authors introduced a little bit of Erlang to show the background of RabbitMQ. Personally i found it was very interesting to learn more about the underlying technology.
RabbitMQ in Action is a good example of why you should read computer books. Even that it is less than 300 pages long, authors dive quite deep and cover a lot of ground. They describe how messages are passed internally and how erlang processes talk to each other. You would not find information of that depth in any tutorials. I read a lot about RabbitMQ recently and i still found a lot of new information in RabbitMQ in Action.
I was quite surprised by the fact that book covered multiple languages in it's code examples. At first I was not sure if it was such a good idea, but then i thought it was brilliant. By using different languages authors prove how easy is it to integrate with RabbitMQ. You share the same messaging bus across different layers of your enterprise. Authors also demonstrate that APIs are quite consistent across platforms and once you work with one, you know them all.
Finally, I think that there was one thing that was missing in the book. I wish RabbitMQ in Action would have more information on messaging best practices and high level guidelines. I believe that message / event driven architecture is something that is quite alien for most web developers and i think it would help a lot to see some insights on how to model your messages / events and how to manage new types of complexities that come with messaging.
Personally i still dont have full picture of how a "perfect" messaging based system should work and what are the levars under my control :) Some of the questions i am still trying to solve myseld are:
- How do i manage message ordering since it is not guaranteed that messages arrive in same order they were produced? Where is the balance between lightweight messages with database reference (id) and large messages containing parts of all of the business data?
- Is it more beneficial to invest a bit more and use XML with XSD and better control over message content or is json more flexible as message payload and it is not worth going into xml at all?
- Should you strive to make all your event listeners idempotent or are there cases when it is not practical?
- What are the most common ways of building integration patterns like aggregator - where you emit a new event only after arrival of two specific events (in any order). For example: you have to wait till at least 2 approvers confirm validity of content. Aggregator keeps track of these events as they come and emits new event once content has been approved.
I am very happy to recommend this book to anyone who wants to learn about RabbitMQ or messaging in general.
Final score: 9 out of 10
About the author
Hi, my name is Artur Ejsmont,
welcome to my blog. I am a passionate software engineer living in Sydney and working for Yahoo!
If you are into technology, you can order my book Web Scalability for Startup Engineers on Amazon. I would love to hear what are your thoughts so please feel free to drop me a line or leave a comment.