RabbitMQ-shovel: Message Relocation Equipment

Matthew Sackman wrote “In several applications, it’s very useful to be able to take messages out of one RabbitMQ broker, and insert them into another. Many people on our mailing list have being asking for such a shovel, and we’ve recently been able to devote some time to writing one. This takes the form of a plugin for…”

Plugin exchange types for RabbitMQ

Michael Bridgen wrote “An obvious extension point for an AMQP broker is the addition of new types of exchange. An exchange type essentially represents an algorithm for dispatching messages to queues, usually based on the message's routing key, given how the queues are bound to the exchange -- it's a routing algorithm. RabbitMQ now supports plugin exchange types, currently on an experimental branch.”

Merry Christmas: Toke — Tokyo Cabinet driver for Erlang

Matthew Sackman wrote “Tokyo Cabinet is a rather excellent key-value store, with the ability to write to disk in a sane way (i.e. not just repeatedly dumping the same data over and over again), operate in bounded memory, and go really fast. I like it a lot, and there’s a likelihood that there’ll be a RabbitMQ plugin fairly…”

RabbitMQ at the Skills Matter Functional Programming Exchange

Matthew Sackman wrote “Today I was lucky enough to give a talk at the Skills Matter Functional Programming Exchange. I talked about resource management in RabbitMQ and how we’re improving this in upcoming versions of RabbitMQ. All the sessions were videotaped and it would seem that a podcast will be going up shortly. In the mean time you…”

Cranial Surgery: Giving Rabbit more Memory

Matthew Sackman wrote “Many users of Rabbit have been asking us about how Rabbit copes with many large messages in queues, to the extent that the total size of these messages exhausts the available physical memory (RAM). As things stand at the moment, the answer is not very well. Although we have a persistence mechanism, that is not…”

Erlang/OTP’s global module

Tony Garnock-Jones wrote “Erlang/OTP’s global module helps with atomic assignment of names for processes in a distributed Erlang cluster. It makes sure that only a single process at a time holds any given name, across all connected nodes. Unlike the local name registration function, names aren’t limited to being atoms: with global, they can be any term at…”

Erlang’s GC only runs when you’re running

Tony Garnock-Jones wrote “Recently, as part of RabbitMQ server development, we ran into an interesting issue regarding Erlang’s per-process garbage collection. If a process is idle — not doing any work at all, simply waiting for an external event — then its garbage-collector will not run until it starts working again. The solution is to hibernate idle processes,…”

RabbitMQ XMPP gateway released

Tony Garnock-Jones wrote “I’m pleased to announce that our XMPP gateway for exposing a RabbitMQ instance to the global XMPP network has been released (documentation, browse or check out code. Update: Because it depends on a newer release of RabbitMQ than 1.3.0, you will also need to check out the server and codegen code from our public mercurial…”

Late-binding with Erlang

Tony Garnock-Jones wrote “Upon browsing the source to the excellent MochiWeb, I came across a call to a function that, when I looked, wasn’t defined anywhere. This, it turns out, was a clue: Erlang has undocumented syntactic support for late-bound method dispatch, i.e. lightweight object-oriented programming! The following example, myclass.erl, is a parameterized module, a feature that arrived…”

Some simple examples of using Erlang’s XPath implementation

Tony Garnock-Jones wrote “We've been investigating the possibility of an XPath-based routing extension to RabbitMQ, where XPath would be used as binding patterns, and the message structure would be exposed as XML infoset. As part of this work, we've been looking at Erlang's XPath implementation that comes as part of the built-in xmerl library. This post walks through a couple of simple examples of using Erlang's XPath implementation to retrieve nodesets matching various criteria.”

Erlang SMTP code updated

Tony Garnock-Jones wrote “A couple of months ago, I improved our erlang SMTP server code. * Mon Oct 15: Support callbacks and more of the spec. Support multiple forward paths. Support callbacks for verification and delivery. Pass domain as well as mailbox for reverse and forward paths. Cope with improper line termination. Log failures in delivery/verification callbacks. *…”

Joe Armstrong on multicore

Matthias Radestock wrote “Joe Armstrong, the inventor of Erlang, paid LShift a visit on Friday. He had kindly agreed to give a short talk to a few of my colleagues. We ended up cramming about twenty people into our meeting room, listening to Joe explain the implications of multicore CPU architectures for programming language design. There were lots…”