By British Post Office (Scan of original(s)) [Public domain], via Wikimedia Commons

RabbitMQ and transactions

David Ireland wrote “RabbitMQ can’t (in general) participate in two phase commit. From a practical point of view, RabbitMQ can only make a message durable by adding it to a queue. This makes quite a few optimisations possible. Transaction participation would require RabbitMQ to spool messages temporarily on disk before adding them to a queue on transaction commit,…”

By Ramessos (Own work) [Public domain], via Wikimedia Commons

RabbitMQ’s new timestamp-tracking feature

Alex Thomas wrote “‘Rest assured our service uses a queue with guaranteed delivery, meaning that your message will always get through. Maybe not this year, but some time, definitely.’ Not quite sold? To help address the requirement for more practical service-level guarantees, we added a feature to RabbitMQ 3.6 called timestamp tracking. Tracking messages via their age has…”

By Nevinson, C R W [Public domain], via Wikimedia Commons

Pushing Back

Matthew Sackman wrote “Over the last year I’ve become more and more convinced that possibly the most important feature of any queuing system is the ability to take action immediately upon enqueuing of a new item, where the action can modify the queue, and is based on state of the queue itself. Most commonly, this is referred to…”

By J.smith (Own work) [CC BY-SA 3.0 (], via Wikimedia Commons

Messaging, partition and consistency

David Ireland wrote “‘Why is this so hard?’ is a recurring theme of my RabbitMQ consulting at the moment. If a database gets a split brain, I just ask it to reconcile, and it mostly works. Why can’t RabbitMQ do that? Here is an attempt to explain that in fairly concrete terms. Imagine a simple system where a…”

By Skrrp (Own work) [CC BY 3.0 (], via Wikimedia Commons

RabbitMQ throughput: assigning blame

David Ireland wrote “Recently I looked at the instrumentation API to see what I could figure out about allocation performance. Actually, there’s a bunch of information available via erlang:system_info:  (rabbit@mrclumsy)2> erlang:system_info({allocator,binary_alloc}). [{instance,0, [{versions,"0.9","3.0"}, ... It’s far too long to include here, but it at least confirms the allocator is the best fit allocator. Erlang also promises that coalescing…”

By Szymon (Poczta Polska) [CC BY 2.0 (], via Wikimedia Commons

The end-to-end principle and RabbitMQ queue mirroring

David Ireland wrote “One of the foundations of the internet is the end-to-end principle as described by Saltzer, J. H., D. P. Reed, and D. D. Clark (1981) in End-to-End Arguments in System Design. This pretty much says queue mirroring as a reliability mechanism is a waste of time. You might argue it’s time the RabbitMQ team has spent…”

By Kander (Own work) [Public domain], via Wikimedia Commons

Bloated Rabbit – Part 1

David Ireland wrote “Can a rabbit with a 128Gb stomach swallow 128Gb of carrots? I’m working with a client at the moment, and they seem to be finding that no, it can’t. I want to figure out why not, so I’m going to have to find out a bit about Erlang memory management. RabbitMQ messages are stored as…”

Pyrexia: IoT office temperature monitoring

Tom Parker wrote “Most of the projects I write about here are pretty much complete, or at least good enough. This one is a little bit more of a work in progress for reasons that will become clear fairly soon… One of the ongoing conversations in LShift over the years has been regarding the temperature in the office. It…”

RabbitMQ on Microsoft Azure

Esther Baruk wrote “With 10,000 new customers each week, Microsoft Azure is one of the major cloud platforms allowing to deploy various services including web applications and virtual machines. RabbitMQ can already be installed on an Amazon EC2 platform or ran as a service on Heroku with Bigwig. In this post, we are going to go through all the steps required…”

Coney: RabbitMQ config tool

Tom Parker wrote “A while back, I was playing around with a series of tools to test RabbitMQ in various related configurations. Now, one thing that these tools had in common, was that the users they were running as only had enough permissions to publish or consume messages, but not to configure the queues/exchange/bindings. This isn’t a common…”