OpenMAMA ZeroMQ Middleware Bridge
Functionality
This project now has complete MAMA middleware bridge functionality. It passes all of the OpenMAMA middleware unit tests and provides:
- Support for point to point, fan-in and fan-out messaging
- Support for any serializable / deserializable MAMA Message payload bridge
- Significant performance improvement over qpid
- Request / Reply Functionality
- Basic Publish / Subscribe
- Market Data Publish / Subscribe
- ZeroMQ TCP transport compatibility
- ZeroMQ PGM (multicast) transport compatibility
- ZeroMQ IPC (named pipes) transport compatibility
You can expect the pub / sub / request / reply example apps to work great out of the box including:
- mamapublisherc / mamasubscriberc
- mamapublisherc / mamainboxc
- capturereplayc / mamalistenc
Releases
We now provide binary releases - see https://github.com/fquinner/OpenMAMA-zmq/releases for a list of binaries available. If we have missed a platform that you are using, please let us know.
Usage Instructions
Linux
After building or grabbing a binary release, you will have a
libmamazmqimpl.so
file created. Add the
directory containing this library to the LD_LIBRARY_PATH
environment
variable and run your applications with -m zmq
to use the bridge.
Windows
After building or grabbing a binary release, you will have a
libmamazmqimplmd.dll
file created. Add the directory containing this
library to the PATH
environment variable or add it to the executable's
directory to allow it to load and run your applications with -m zmq
to
use the bridge.
Setting up a transport
Check out the mama.properties file for details on the various transport options available and how to set them up. You can also use a forwarder as detailed here.
It's worth mentioning you can also override the following zmq socket settings
directly as well if you find you need to by setting mama.zmq.transport.<transportname>.<settingname>
where settingname
is one of the list below, as defined by zeromq
in their documentation:
- zmq_sndhwm
- zmq_rcvhwm
- zmq_affinity
- zmq_identity
- zmq_sndbuf
- zmq_rcvbuf
- zmq_reconnect_ivl
- zmq_reconnect_ivl_max
- zmq_backlog
- zmq_maxmsgsize
- zmq_rcvtimeo
- zmq_sndtimeo
- zmq_rate
Note that any settings made here will apply to all sockets that are created by the transport.
Payload Selection
This middleware bridge uses the qpid payload bridge by default. If you want to use the omnm payload (less functionality but much faster than qpid), you can have a look at the omnm github page to find out how.
Build Instructions
Supported Platforms
- RHEL / CentOS
- Fedora
- Ubuntu
- Windows
Dependencies
The bridge depends on:
- MAMA / OpenMAMA (2.4.0+ / 6.0.7+ / 6.1.x)
- Libevent (1.x)
- Scons (will also require Python)
- Libuuid (only on Linux)
Building
If you have all the prerequisites, the build process should be pretty straightforward:
scons --with-mamasource=PATH --with-mamainstall=PATH
Project Goals
This ethos of this project is to:
- Create a fully functional ZeroMQ bridge which introduces minimal latency and maximum throughput when compared with a native ZeroMQ implementation.
- Create a bridge which is fully conformant with the latest OpenMAMA acceptance and unit tests.
- Give anything which would be useful for 'any old middleware bridge' back to the OpenMAMA core project.
NB: This project is MIT Licensed and in no way affiliated with nor supported by the OpenMAMA project or SR Labs - if you find any issues, please report to this project via github.
Related Projects
Blog
If you're interested in the thought process behind this or the ramblings of the author, you can shoot on over to my blog page.