The ØMQ Reference Manual specifies the ØMQ API.
The ØMQ FAQ by the community is the first place to look for answers to frequently asked questions and problems.
- ZeroMQ is the Answer by Ian Barber (video is below)
- Implementing Distributed Applications using ZeroMQ by Francesco Crippa
- Overview of ZeroMQ by Pieter Hintjens
- Multithreading Magic by Pieter Hintjens
In 2011, CERN (the European Organization for Nuclear Research) compared CORBA, Ice, Thrift, ZeroMQ, YAMI4, RTI, and Qpid (AMQP). Read their analysis and conclusions. (PDF).
Who is Using ØMQ?
Since ØMQ is free software we don't track who uses it. However, some organizations that we know use it are: AT&T, Cisco, EA, Los Alamos Labs, NASA, Weta Digital, Zynga, Spotify, Samsung Electronics, Microsoft, and CERN.
This shows a filter that collects data from two different remote publishers and sends it to local subscribers:
import zmq import time context = zmq.Context() subscriber = context.socket (zmq.SUB) subscriber.connect ("tcp://192.168.55.112:5556") subscriber.connect ("tcp://192.168.55.201:7721") subscriber.setsockopt (zmq.SUBSCRIBE, "NASDAQ") publisher = context.socket (zmq.PUB) publisher.bind ("ipc://nasdaq-feed") while True: message = subscriber.recv() publisher.send (message)
The best way to get started with ZeroMQ is to work through some hands-on examples - the concepts are not new, but the ease with which you can compose them takes some getting use to.
"0MQ sockets being asynchronous means that the timings of the physical connection setup and teardown, reconnect and effective delivery are transparent to the user and organized by 0MQ itself. Further, messages may be queued in the event that a peer is unavailable to receive them."
"The more time I spend with ZeroMQ, the less I can think of a reason I'd ever have to open up a raw TCP or UDP socket, except in extraordinary circumstances, again."
"ZeroMQ is a messaging library, which allows you to design a complex communication system without much effort."
"What ZeroMQ does is create an API that looks a lot like sockets, and feels the same, but gives you the messaging styles you actually want. By simply specifying the type of socket when you call zmq_socket you can have multicast, request/reply, and many other styles."
This presentation, "ZeroMQ is the Answer", is by Ian Barber at the PHP UK Conference.
FLOSS Weekly's Randal Schwartz and Aaron Newcomb discuss ØMQ with Pieter Hintjens:
Backgrounders and Whitepapers
- Pieter Hintjens and Martin Sustrik explain how ØMQ solves the challenge of creating large multicore applications in any language. Also in PDF (8 pages).
- Martin Sustrik explains the differences between broker-based and brokerless messaging approaches.
- Pieter Hintjens explains how edge-to-edge reliability is more scalable and robust than broker-based reliability.
- Martin Sustrik explains the internal design of ZeroMQ's first implementation.