ZeroMQ vs Crossroads I/O

Jakob Möllås picture Jakob Möllås · Nov 21, 2012 · Viewed 18k times · Source

I am looking into using ZeroMQ as the messaging/transport layer for a fairly large distributed system, mainly targeting monitoring and data collection (many producers, a few consumers).

As far as I can see there are currently two different implementations of the same concept; ZeroMQ and Crossroads I/O, the latter being a fork of ZeroMQ (in 2012?).

I am trying to figure out which one to use and wonder about the differences between them, but have so far not found much information regarding this.

For example:

  • Are they compatible on the wire?
  • Are they API compatible, i.e. some kind of common base API, possibly with different add-ons?
  • Do they both implement support for ZMTP (ZeroMQ Message Transport Protocol)?
  • Do they share some kind of common understanding of future development or will they continue in two separate and possible different directions?
  • What are the pros/cons in relation to the other?

Basically, how do one choose one over the other?

Answer

Pieter Hintjens picture Pieter Hintjens · Nov 22, 2012

Crossroads.io is pretty dead since Martin Sustrik has started on a new stack, in C, called nano: https://github.com/250bpm/nanomsg

Crossroads.io does not, afaik, implement ZMTP/1.0 nor ZMTP/2.0 but its own version of the protocol.

Nano has pluggable transports and we'll probably make a ZMTP transport for that. Nano is really nice, a rethinking of the original libzmq library, and if it's successful would make a good new kernel.

Ideally, Nano would interoperate both at the API and the protocol level, so be a pluggable replacement for libzmq. It does have quite a long way to go, though.

Note that there are now several rewrites of libzmq emerging, including JeroMQ (Java) and NetMQ (C#). These two do implement ZMTP/1.0 and ZMTP/2.0 properly. There are also other libraries like Axon (https://github.com/visionmedia/axon) which are heavily inspired by 0MQ but not compatible.

Based on experience, users value interoperability more than almost anything else, so it's quite likely that different 0MQ-like stacks will end up speaking the same protocols.