|This article relies too much on references to primary sources. (July 2010)|
|Stable release||4.1.3 / 17 August 2015|
|Type||Message queue, concurrency framework|
|License||LGPL with static linking exception|
ØMQ (also spelled ZeroMQ, 0MQ or ZMQ) is a high-performance asynchronous messaging library, aimed at use in distributed or concurrent applications. It provides a message queue, but unlike message-oriented middleware, a ØMQ system can run without a dedicated message broker. The library's API is designed to resemble that of Berkeley sockets.
ØMQ is developed by a large community of contributors, founded by iMatix, which holds the domain name and trademarks. There are third-party bindings for many popular programming languages.
The ØMQ API provides sockets (a kind of generalization over the traditional IP and Unix domain sockets), each of which can represent a many-to-many connection between endpoints. Operating with a message-wise granularity, they require that a messaging pattern be used, and are particularly optimized for that kind of pattern.
The basic ØMQ patterns are:
- Connects a set of clients to a set of services. This is a remote procedure call and task distribution pattern.
- Connects a set of publishers to a set of subscribers. This is a data distribution pattern.
- Push–pull (pipeline)
- Connects nodes in a fan-out / fan-in pattern that can have multiple steps, and loops. This is a parallel task distribution and collection pattern.
- Exclusive pair
- Connects two sockets in an exclusive pair. (This is an advanced low-level pattern for specific use cases.)
Each pattern defines a particular network topology. Request-reply defines so-called "service bus", publish-subscribe defines "data distribution tree", push-pull defines "parallelised pipeline". All the patterns are deliberately designed in such a way as to be infinitely scalable and thus usable on Internet scale.
Any message through the socket is treated as an opaque blob of data. Delivery to a subscriber can be automatically filtered by the blob leading string. Available message transports include TCP, PGM (reliable multicast), inter-process communication (IPC) and inter-thread communication (ITC).
The ØMQ core library performs very well due to its internal threading model, and can outperform conventional TCP applications in terms of throughput by utilizing an automatic message batching technique.
ØMQ implements ZMTP, the ZeroMQ Message Transfer Protocol. ZMTP defines rules for backward interoperability, extensible security mechanisms, command and message framing, connection metadata, and other transport-level functionality. A growing number of projects implement ZMTP directly as an alternative to using the full ØMQ implementations.
iMatix CEO Pieter Hintjens registered the zeromq.org domain in May 2007 and started the ØMQ project together with Martin Sustrik, who was its architect and lead developer until December 2011.
On March 30, 2010, Hintjens announced that iMatix (the original designer of Advanced Message Queuing Protocol) would leave the AMQP workgroup and did not plan to support AMQP/1.0 in favor of the significantly simpler and faster ØMQ.
In 2011, CERN was investigating ways to unify middleware solutions used to operate CERN accelerators. The CERN study compared two open source implementations of CORBA, Ice, Thrift, ØMQ, YAMI4, RTI, and Qpid (AMQP) and scored ØMQ highest, in part for its versatility, including its easy adaptability to the LynxOS.
In March 2013, Pieter Hintjens announced a new draft of the ZMTP wire-level protocol bringing extensible security mechanisms to ØMQ. Martin Hurton implemented the CurveZMQ authentication and encryption mechanism in the core library shortly afterwards.
The ØMQ community mostly uses the Collective Code Construction Contract (C4) as a development contract. C4 is inspired by Wikipedia processes and GitHub's fork + pull request model. It focuses on making it simpler for new contributors to participate and reducing dependency on older contributors.
- Scalability Layer Hits the Internet Stack
- "How come ØMQ has higher throughput than TCP although it's built on top of TCP?". ZeroMQ FAQ. Retrieved 8 June 2013.
- "Middleware Trends And Market Leaders 2011". Retrieved 8 June 2013.
- "ZeroMQ Message Transfer Protocol". Retrieved 8 June 2013.
- "GitHub Search: ZMTP". Retrieved 8 June 2013.
- "iMatix will end OpenAMQ support by 2011". openamq-dev maillist. Retrieved 14 July 2012.
- "What is wrong with AMQP (and how to fix it)". iMatix Corporation. Retrieved 14 July 2012.
- "Inspirel YAMI4". Retrieved 14 July 2012.
- "ZeroMQ and Crossroads I/O: Forking over trademarks". LWN.net. Retrieved 14 July 2012.
- "Crossroads I/O". Retrieved 14 July 2012.
- "nanomsg". Retrieved 8 June 2013.
- "Why should I [sic] have written ZeroMQ in C, not C++".
- "jeromq - java pojo zeromq". zeromq-dev mailing list. Retrieved 23 May 2013.
- "NetMQ". GitHub. Retrieved 23 May 2013.
- "Securing ZeroMQ: draft ZMTP v3.0 Protocol". Hintjens.com. Retrieved 23 May 2013.
- "Collective Code Construction Contract (C4.1)". ZeroMQ RFCs. Retrieved 23 May 2013.
- Official website
- The ØMQ community on GitHub
- Martin Sustrik, Martin Lucina (January 20, 2010). 0MQ: A new approach to messaging – LWN.net.
- ZeroMQ is the Answer (a talk at PHP UK conference 2012)
- ZeroMQ an introduction
- Selecting a Message Queue – AMQP or ZeroMQ
- Why ZeroMQ? (introductory video)
- ZeroMQ: Modern & Fast Networking Stack (overview with Ruby examples)
- ØMQ: The Theoretical Foundation