ØMQ
   HOME

TheInfoList



OR:

ZeroMQ (also spelled ØMQ, 0MQ or ZMQ) is an asynchronous
messaging A message is a discrete unit of communication intended by the source for consumption by some recipient or group of recipients. A message may be delivered by various means, including courier, telegraphy, carrier pigeon and electronic bus ...
library, aimed at use in
distributed Distribution may refer to: Mathematics *Distribution (mathematics), generalized functions used to formulate solutions of partial differential equations *Probability distribution, the probability of a particular value or value range of a varia ...
or concurrent applications. It provides a
message queue In computer science, message queues and mailboxes are software-engineering components typically used for inter-process communication (IPC), or for inter-thread communication within the same process. They use a queue for messaging â€“ th ...
, but unlike
message-oriented middleware Message-oriented middleware (MOM) is software or hardware infrastructure supporting sending and receiving messages between distributed systems. MOM allows application modules to be distributed over heterogeneous platforms and reduces the complex ...
, a ZeroMQ system can run without a dedicated
message broker A message broker (also known as an integration broker or interface engine) is an intermediary computer program module that translates a message from the formal messaging protocol of the sender to the formal messaging protocol of the receiver. Mess ...
; the zero in the name is for zero broker. The library's API is designed to resemble
Berkeley sockets Berkeley sockets is an application programming interface (API) for Internet sockets and Unix domain sockets, used for inter-process communication (IPC). It is commonly implemented as a library of linkable modules. It originated with the 4.2BS ...
. ZeroMQ 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.


Technology

The ZeroMQ API provides ''sockets'' (a kind of generalization over the traditional IP and
Unix domain socket A Unix domain socket aka UDS or IPC socket ( inter-process communication socket) is a data communications endpoint for exchanging data between processes executing on the same host operating system. It is also referred to by its address family AF_U ...
s), each of which can represent a
many-to-many Many-to-many communication occurs when information is shared between groups. Members of a group receive information from multiple senders. Wikis are a type of many-to-many communication, where multiple editors collaborate to create content that is ...
connection between endpoints. Operating with a message-wise granularity, they require that a
messaging pattern In software architecture, a messaging pattern is an architectural pattern which describes how two different parts of an application, or different systems connect and communicate with each other. There are many aspects to the concept of messaging w ...
be used, and are particularly optimized for that kind of pattern. The basic ZeroMQ patterns are: ; Request–reply :Connects a set of clients to a set of services. This is a
remote procedure call In distributed computing, a remote procedure call (RPC) is when a computer program causes a procedure (subroutine) to execute in a different address space (commonly on another computer on a shared network), which is coded as if it were a normal (lo ...
and task distribution pattern. ; Publish–subscribe :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 Parallel is a geometric term of location which may refer to: Computing * Parallel algorithm * Parallel computing * Parallel metaheuristic * Parallel (software), a UNIX utility for running programs in parallel * Parallel Sysplex, a cluster of I ...
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 a so-called "service bus", publish-subscribe defines a "data distribution tree", and 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 IPC may refer to: Computing * Infrastructure protection centre or information security operations center * Instructions per cycle or instructions per clock, an aspect of central-processing performance * Inter-process communication, the sharin ...
) and inter-thread communication (ITC). The ZeroMQ 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. ZeroMQ 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 ZeroMQ implementations.


History

iMatix CEO
Pieter Hintjens Pieter Hintjens (3 December 1962 â€“ 4 October 2016) was a Belgian software developer, author, and past president of the Foundation for a Free Information Infrastructure (FFII), an association that fights against software patents. In 2007, ...
registered the zeromq.org domain in May 2007 and started the ZeroMQ 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 The Advanced Message Queuing Protocol (AMQP) is an open standard application layer protocol for message-oriented middleware. The defining features of AMQP are message orientation, queuing, routing (including point-to-point and publish-and-subsc ...
) would leave the AMQP workgroup and did not plan to support AMQP/1.0 in favor of the significantly simpler and faster ZeroMQ. 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 The Common Object Request Broker Architecture (CORBA) is a standard defined by the Object Management Group (OMG) designed to facilitate the communication of systems that are deployed on diverse platforms. CORBA enables collaboration between sy ...
,
Ice Ice is water frozen into a solid state, typically forming at or below temperatures of 0 degrees Celsius or Depending on the presence of impurities such as particles of soil or bubbles of air, it can appear transparent or a more or less opaq ...
,
Thrift Thrift may refer to: * Frugality * A savings and loan association in the United States * Apache Thrift, a remote procedure call (RPC) framework * Thrift (plant), a plant in the genus ''Armeria'' * Syd Thrift (1929–2006), American baseball exec ...
, ZeroMQ, YAMI4,
RTI RTI or Rti may refer to: Broadcasters * Radiodiffusion Television Ivoirienne, state broadcaster of Ivory Coast * Radio Taiwan International, a radio station in Taiwan * Reti Televisive Italiane, an Italian broadcaster and subsidiary of Media ...
, and
Qpid "Qpid" is the 94th episode of the syndicated American science fiction television series '' Star Trek: The Next Generation'', the 20th episode of the fourth season. Set in the 24th century, the series follows the adventures of the Starfleet c ...
(AMQP) and scored ZeroMQ highest, in part for its versatility, including its easy adaptability to the
LynxOS The LynxOS RTOS is a Unix-like real-time operating system from Lynx Software Technologies (formerly "LynuxWorks"). Sometimes known as the Lynx Operating System, LynxOS features full POSIX conformance and, more recently, Linux compatibility. Ly ...
. At the start of 2012, two of the original developers forked ZeroMQ as Crossroads I/O. Martin Sustrik has started nanomsg, a rewrite of the ZeroMQ core library. In August 2012, Dongmin Yu announced his pure Java conversion of ZeroMQ, JeroMQ. This has inspired further full-native ports of ZeroMQ, such as NetMQ for C# and zmq.rs for Rust. In March 2013, Pieter Hintjens announced a new draft of the ZMTP wire-level protocol bringing extensible security mechanisms to ZeroMQ. Martin Hurton implemented the CurveZMQ authentication and encryption mechanism in the core library shortly afterwards.


Development process

The ZeroMQ community mostly uses the Collective Code Construction Contract (C4) as a development contract. C4 is inspired by
Wikipedia Wikipedia is a multilingual free online encyclopedia written and maintained by a community of volunteers, known as Wikipedians, through open collaboration and using a wiki-based editing system. Wikipedia is the largest and most-read ref ...
processes and
GitHub GitHub, Inc. () is an Internet hosting service for software development and version control using Git. It provides the distributed version control of Git plus access control, bug tracking, software feature requests, task management, co ...
's fork +
pull request In software development, distributed version control (also known as distributed revision control) is a form of version control in which the complete codebase, including its full history, is mirrored on every developer's computer. Compared to centr ...
model. It focuses on making it simpler for new contributors to participate and reducing dependency on older contributors.


See also

*
Xitami Xitami is a Web and FTP server, originally developed by iMatix Corporation as a free, open-source product from 1996 to 2000. It ran as a single process with a small footprint. It was not as fast as the fastest servers but scaled well. It supporte ...
*
Gearman Gearman is an open-source application framework designed to distribute appropriate computer tasks to multiple computers, so large tasks can be done more quickly. In some cases, load balancing rather than raw speed may be the main goal; a Web serve ...
*
Enduro/X Enduro/X is an open-source middleware platform for distributed transaction processing. It is built on proven APIs such as X/Open group's XATMI and XA. The platform is designed for building real-time microservices based applications with a clu ...
*
MQTT MQTT (originally an initialism of MQ Telemetry Transport) is a lightweight, publish-subscribe, machine to machine network protocol for Message queue/Message queuing service. It is designed for connections with remote locations that have devices ...


References


External links

*
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 introductionWhy ZeroMQ?
(introductory video)
ZeroMQ: Modern & Fast Networking Stack
(overview with Ruby examples)
ØMQ: The Theoretical Foundation
{{DEFAULTSORT:Omq Concurrent programming libraries Free software programmed in C++ Free system software Inter-process communication Message-oriented middleware 2007 software