In this blog post I’d like to introduce you to one of our latest developments: the RabbitMQ Simulator.
This simulator was born out of a need—we wanted a better tool to teach RabbitMQ concepts to people that were new to the message broker and its AMQP protocol.
If you know me, you are probably aware that I have given quite a few RabbitMQ presentations over the year at several technical conferences. After explaining AMQP concepts many times with static images, I decided the time had come for a better tool—something more graphic and visual, something with more life and motion. So, I started working on this RabbitMQ Simulator project.
Why a RabbitMQ Simulator? The Goals
The goal of the simulator was to have a graphical tool where I could design messaging topologies by simply dragging and dropping exchanges, queues, consumers and producers into a blank canvas. Then, I wanted to draw connections between components, simulate routing keys, publish messages after pressing a button, and more. If a RabbitMQ user could see the diagrams and see the message flow across them, they would have a better understanding of how RabbitMQ works.
A second goal for the simulator was that it had to run on the browser without requiring plugins. We wanted to be able to embed the simulator sketches inside online tutorials—this would literally illustrate what the tutorial was about. I first started the project using raphael.js, which is based on SVG and plain Javascript but later switched to Processing.js, which uses a Java-like language and compiles to Javascript. The advantages I saw on the latter were that the processing language has, in my opinion, an easier Object Oriented Programming (OOP) model that allows you to handle several widgets. This is what my project required. Apart from that, I had some SVG rendering issues that I didn’t encounter with HTML5 Canvas—which Processing.js uses. But enough with the implementation details, let’s discuss what the new RabbitMQ Simulator can do for you.
Implementing the RabbitMQ Simulator Prototype
Once I got the simulator prototype running, I started showing it to several of my colleagues. From those discussions, we concluded that the simulator could be a bit more than a simple teaching tool—we could actually use it to design messaging topologies and export them directly into RabbitMQ. At the same time, the simulator could import a messaging topology into the canvas and show at a glance all the connections between components. The latter concept was pretty powerful. For example, if you need to debug your routing configuration, you can import what you have inside RabbitMQ. You could then see it within the simulator and simulate message sending. This would help to visualize exactly how routing is happening complete with animations.
RabbitMQ Simulator Features
- The simulator currently implements the following features:
- Three exchange types: direct, fanout and topic
- Queue bindings and exchange-to-exchange bindings
- Publishers that can specify payload, routing key and publish interval, like “publish 1 message every 2 seconds”
- Message queuing
- Round-robin message delivery
- Default “anon” exchange representation
- Export topology for a “play only” mode (useful for tutorials)
RabbitMQ Simulator Video
But, enough with words. Here we have a video that demos several messaging scenarios by using the RabbitMQ Simulator.
RabbitMQ Simulator Open Source Bits
Now, you are probably asking yourself, “where can I get my hands on this simulator?” We published it as open source in Github here:
https://github.com/RabbitMQSimulator/RabbitMQSimulator
As a final note, keep in mind that it is a simulator. This is not an actual broker, and it doesn’t use RabbitMQ. It just simulates the broker on the browser side. As in every simulation, some details from reality are left out in order to provide a model that is useful for its users.
To Learn more about RabbitMQ and RabbitMQ Simulator
- Watch the video
- Read the book RabbitMQ in Action
- Learn more from articles on the product, find case studies, and more
- Read more about the AMQP concepts
- Download the RabbitMQ Simulator from Github
Find more resources along with a free evaluation copy of vFabric RabbitMQ
![]() |
About the Author: Alvaro Videla is a software developer on the Cloud Foundry team within VMware in Switzerland. Before moving to Europe, he worked in Shanghai to build one of the largest German online dating sites. Alvaro Co-wrote the book “RabbitMQ in Action” for Manning Publishing. Some of the RabbitMQ open source projects can be found here. In addition to programming, Alvaro enjoys music, books, and traveling with his wife. |




Very useful this happened right before my interview
I pushed the simulator code at commit ID 8c997eb95891588a676ac58708bda2386ee342f1 to my Cloud Foundry account at http://rabbitmq-sim.cloudfoundry.com. Now you don’t even have to deploy it yourself to experiment with RabbitMQ message passing.
Enjoy!
Pingback: HOWTO: Deploying RabbitMQ Simulator on Cloud Foundry | VMware vFabric Blog - VMware Blogs
I have to express appreciation to the writer just for rescuing me from this particular setting. After surfing around throughout the online world and finding methods that were not productive, I was thinking my entire life was well over. Being alive without the presence of approaches to the difficulties you have resolved as a result of your main article content is a critical case, and those which might have in a wrong way damaged my career if I hadn’t noticed your web blog. Your good understanding and kindness in touching all areas was priceless. I am not sure what I would’ve done if I hadn’t encountered such a step like this. I can now relish my future. Thank you very much for the expert and results-oriented help. I won’t hesitate to recommend your blog to any person who should get tips about this issue.
Pingback: How Fast is a Rabbit? Basic RabbitMQ Performance Benchmarks | VMware vFabric Blog - VMware Blogs
Great application, very useful.
I’d like to suggest that the exchanges could be identified by its type, like a [fanout] at the bottom of the circle.