[jdev] Financial messaging via XMPP
dave at cridland.net
Fri Jan 25 10:20:06 CST 2008
I was going to wade in on this one sooner, but I wanted to read the
AMQP specification first. It strikes me that the bulk of the
specification actually maps onto XML (and, by inference, XMPP) quite
well, so I'm a little surprised by the conclusion you draw.
I apologise for answering points that are already answered by other
people - I've seen Maciek's reply but left my similar comments in -
and I apologise if I've got bits of AMQP wrong - I've spent not much
more than an hour learning it.
On Fri Jan 25 15:02:32 2008, Martin Sustrik wrote:
> 1. XMPP can be used for sending opaque messages, however, there are
> several limitations:
> 2. Binary content has to be translated into Base64, adding 1/3 of
> overhead to message size
Not really - assuming the binary message is incompressible to begin
with, the base64 encoding is recovered through compression - XMPP
gives you this both by XEP-0138 and by TLS. On the assumption that
you care about bandwidth, you'll have compression on, and your
messages will be compressed anyway. Equally, they'll potentially be
end-to-end encrypted, too.
Rather oddly, AMQP contains nothing about either compression nor
encryption. I'd have thought the latter would be important in
financials. (Oh, and that SASL profile is incomplete - SASL can
negotiate encryption too, but there's no indication of where this
might kick in, nor any MTI mechanisms).
> 3. There's no way to do zero-copy as the message has to be
> translated on both ends of the connection
Sure. But then again, a lot of the data in AMQP needs to be copied
anyway to circumvent alignment issues, handle buffering, queuing,
etc. Unless you're sending really big chunks of longstr data about,
the impact is likely to be low - and even if you are, it's just one
For servers, where this would be the highest impact, it seems very
unlikely that any data is going to be examined anyway - servers look
at routing keys and topics, and more or less leave everything else
untouched, so it'd seem reasonable to stick topics and routing keys
in XML, and then leave the message payload as a blob.
All this assumes that the messages can't be formatted as XML, of
> 4. All the messages have to be acknowledged. No no-acknowledge mode
<message/> is unacknowledged, <iq/> is acknowledged.
(To put it another way, <iq/> are like your Request/Response frames.)
> 5. There's no batch acknowledge functionality (acknowledging
> sequence of messages using single acknowledge).
Depends what you mean by this. If you use <iq/>, then no, but then
again, these can be acknowledged end-to-end out of order, just as
Request/Response frames do in AMQP.
If you mean across a connection, then look at XEP-0198, which
provides precisely this, as well as several other useful features for
reliability. (And much better than AMQP's heartbeat frames, too, IMO).
> 6. Pipelining of acknowledges is allowed, but discouraged. ("The
> sender need not wait for these acknowledgements before sending
> further stanzas. However, it is RECOMMENDED that the sender does
> wait in order to minimize possible rate-limiting penalties.")
That's a RECOMMENDED - a SHOULD not a MUST - and only for
bytestreams. If you're sending <message/> stanzas with binary
content, there's no need to concern yourself with whether the
endpoint is acknowledging, since it won't be. Worth noting that
bytestreams are for arbitrary length data - while AMQP does in
principle allow frames of several G (assuming they're made up of
multiple longstrs, for example), I'm under the impression that
individual frames tend to be relatively small, and would map to a
single XMPP stanza.
I'd suggest sitting down and examining RFC3920bis, and familiarizing
yourself with the general concepts. XMPP will not be as efficient as
AMQP, but the difference need not be huge. On the other hand, the
potential gains coming from using XMPP are very great indeed, giving
you improvements in security and multiple sites to name but two.
I hope this helps.
Dave Cridland - mailto:dave at cridland.net - xmpp:dwd at jabber.org
Infotrope Polymer - ACAP, IMAP, ESMTP, and Lemonade
More information about the JDev