Zaqar/specs/Protocols/Wire Transport
< Zaqar
Revision as of 16:34, 16 July 2013 by Alejandro Cabrera (talk | contribs) (Remove JSON support, update structure.)
Marconi ZMQ API: v1 Blueprint
Since zmq is all about messages and there's no *defined* high level protocol, Marconi defined its own which tries to be as much compliant as possible with HTTP structure.
Serialization
Marconi's ZMQ transport uses msgpack as a serialization format.
Structure
{ href: "", action: "", # HTTP verbs accepted headers: { }, body: { } }
Headers
Even though Marconi's endpoints try to be as much similar as possible, there are some slightly difference between them. Note that ZMQ transport doesn't implement some of the HTTP headers since they're meaningless for it, like:
- Host
- Content-Length
- Accept-Encoding
- Content-Type
Header | Description |
User-Agent | The name and version of the Marconi client, as well as a UUID for that client. Marconi uses the UUID to distinguish publishers from subscribers, i.e., to avoid echoing an agent's own messages back to it. |
Date | The current date and time, using the standard RFC 1123 HTTP date format |
Accept | Media type desired; Either `application/json` or `application/messagepack`; If none was specified, the later will be used. |
X-Auth-Token | Keystone auth token |
X-Project-ID | An ID for a project to which the value of X-Auth-Token grants access. Queues will be created under this project. |
Client-ID | A unique ID for each client instance. In Marconi, this is used to avoid echoing a sender's messages back to the same instance, and may be logged by the server for future use. Should be generated once and persisted between restarts of the client. |
Example
{ "href": "zmq://marconi.example.com/v1/queues/my_awesome_queue", "action": "get", "header": { "User-Agent": "python/2.7 killer-rabbit/1.2", "Date": "Wed, 2 8 Nov 2012 21:14:19 GMT", "Accept": "application/x-msgpack", "Client-ID": 30387f00-39a0-11e2-be4d-a8d15f34bae2, "X-Project-ID": 518b51ea133c4facadae42c328d6b77b, "X-Auth-Token": "7d2f63fd-4dcc-4752-8e9b-1d08f989cc00" }, "body": { ... } }
See msgpack Accept.