This is a message broker Marionette Collective 0MQ (mc0) protocol.
It's in C++ for peformance reasons. If you want to understand the protocol you may find the ruby implementation in the mcollective-zeromq-connector repository easier to read.
- cmake
- a C++11 compiler
- Boost >= 1.48
- log4cxx
- zeromq >= 4.0
./bin/mc0d --curve-private-key broker.private
Logging is handled by log4cxx, a port of the common log4j logging library.
Set a path to a properties file using the --logger-config
argument.
# Add a rotating logfile at debug level
log4j.rootLogger = DEBUG, logfile
log4j.appender.logfile = org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File = mc0d.log
log4j.appender.logfile.MaxFileSize = 100MB
log4j.appender.logfile.MaxBackupIndex = 5
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
We don't, it's expected you will be able to write an init script or other process supervision configuration that can supervise mc0d for your distribution.
We haven't yet been able to do extensive scale testing, but this can service a few hundred nodes quite easily on a very modest linux vm.
zeromq's implementation of Curve does not appear to easily allow for trust relationship between keys, so there's no existing model for 'create a ca to issue keys and track revocations'.
zeromq additionally does not seem to allow for the validation of client keys,
by the server http://hintjens.com/blog:36, the clients can only verify the
server is the one indicated by plugin.zeromq.broker.public_key
.
The implementation of the broker does not allow for persistent queues, and so advanced uses of MCollective's asyncronous reply handling pattern such as those explained here are not currently supported.