Flexible protocol schema for message-passing distributed systems.
As part of a fairly large distributed system, I needed a way to format messages
I would be sending through an AMQP bus with the following requirements:
* Client support for at least PHP, Python, Java, and Erlang.
* Small and reasonably fast (meaning, no XML).
* Message versioning (add/remove/rename fields) with seamless fallback (older
client can ignore new fields).
* Easily installable (from the cheeseshop, for instance).
* Allows me to write a schema, and checks messages to be valid both when
sending and receiving.
* Messages are tagged with their type (so I can decode a message into an
object/struct without knowing what type the message should be).
* If possible, field names should be sent in the message so that even if I
don't have the schema, messages can be processed (say, from an unsupported
* Should handle binary data without exagerated overhead (think base64 encoding
in JSON messages).
* Well documented and actively developed.
I looked into projects such as Google's Protocol Buffers, Apache's Thrift and
Avro, MessagePack-RPC, ZeroC's Ice, and probably some others but I could not
find a system that had most/all my requirements, so I decided to write my own.
In a nutshell, codinghyde.synapse is/has:
* An IDL to describe message formatting.
* A compiler/code-generator to produce easy-to-work-with code.
* A generic message encoder/decoder framework targetting JSON, BSON, MsgPack,
and YAML (after all, why invent yet another serialization format...).
* Designed so that messages are processable without language support (decode
the raw JSON message and it's contents should require little/no post
processing to be useful).
You can reach me via e-Mail at:
ehyde at codinghyde com
Documentation will be a bit scarse for the time being, but everything public
should have at least a docstring by the time I make the first stable release.
Released under the MIT/X11 license. See LICENSE for the full text.
% python setup.py install
See DEVELOP for details.