Message queues

January 8, 2016 — January 8, 2016

computers are awful
computers are awful together
concurrency hell
premature optimization

A method of multi-process or multi-machine concurrency via sending messages to each other asynchronously. Much cloud computation runs on this. You can build remote procedure calls using this, or stream processing systems. Or the internet.

1 Implementations

  • The easiest message queue I know is ZeroMQ, which is used by ipython and lots of other things. It’s infrastructure for many of the higher-level libraries but quite sufficient on its own to do surprising stuff.

    ZeroMQ (also known as ØMQ, 0MQ, or zmq) looks like an embeddable networking library but acts like a concurrency framework. It gives you sockets that carry atomic messages across various transports like in-process, inter-process, TCP, and multicast. You can connect sockets N-to-N with patterns like fan-out, pub-sub, task distribution, and request-reply. It’s fast enough to be the fabric for clustered products. Its asynchronous I/O model gives you scalable multicore applications, built as asynchronous message-processing tasks. It has a score of language APIs and runs on most operating systems. ZeroMQ is from iMatix and is LGPLv3 open source.

  • spyne

    …is a Python RPC toolkit that makes it easy to expose online services that have a well-defined API using multiple protocols and transports.

    Very simple exposing of Python services to any old language over HTTP or whatever you feel like. (source)

  • Pizco

    …is a Python module/package that allows Python objects to communicate via ZMQ. Objects can be exposed to other processes in the same computer or over the network, allowing clear separation of concerns, resources, and permissions.

    Looks under-maintained

  • zerorpc

    …is a lightweight, reliable, and language-agnostic library for distributed communication between server-side processes. It builds on top of ZeroMQ and MessagePack. Support for streamed responses - similar to Python generators - makes zerorpc more than a typical RPC engine. Built-in heartbeats and timeouts detect and recover from failed requests. Introspective capabilities, first-class exceptions, and the command-line utility make debugging easy.

    Node.js and Python implementation.