Advanced Message Queuing Protocol (AMQP)
2006-06-20, http://www.infoq.com/news/amq says:
- The Advanced Message Queuing Protocol (AMQP) has been announced today by the newly formed AMQP working group which consists of JP Morgan Chase, RedHat, Twist, Iona, Cisco, and others. AMQP is an open specification for queue-based messaging that is technology agnostic, designed for performance and completely interoperable; it defines a protocol and model for queue-based messaging. The AMQP protocol aims commoditize the messaging middleware industry and provide true interoperability across technology stacks in any language or operating system. JMS APIs over AMQ could easily interoperate with .NET clients or any other language or platform that can communicate via AMQP.
See also 0MQ (ZeroMQ)
Comparison to PSYC
Here are some differences to PSYC:
- It goes into many details concerning multiplexing down to Quality of Service and Flow Control, which we only kind-of provide by the simpler concept of MMP fragments, without specifying a plan on how to control their amount and flow yet.
- It has finer grained remote controllable message queues (which we call history or lastlog). PSYC could however provide such a function on demand, because the entities receiving those messages are programmable.
- AMQP is a binary protocol, thus more compact. But compared to compact PSYC as to be standardized RSN, not such a big gain. In both cases, syntactic overhead is minimal. The traffic comes either from the transported content, or from the TCP/IP overhead.
- AMQP has strict data types.
- No routing syntax - you can only address entities at the other end of the line, it is therefore very unlikely to find a syntactical solution to introduce multicasting into AMQP. And even then, with PSYC you already have it. 4.1 mentions "The UDP port will be used in a future multi-cast implementation". This sounds a lot like IP Multicast is actually intended, with its strengths and weaknesses. It also sounds like they will have to trick the protocol a bit to introduce a multicast addressing scheme when there is no distributed addressing scheme really.
- AMQP is a binary protocol, it can't do what PSYC does with variable inheritance. And you can't telnet to it. ;)
- AMQP has strict data types.
The palpable version of the protocol syntax looks a bit like classic methods and headers combined with an SQL SELECT type of syntax where some headers have conditional clauses. Good about this: you don't need extra headers to specify conditions, bad about this: you don't get PSYC variable inheritance.
Concluding, this protocol looks well structured and conceived. Within its applicative domain, it could become useful. Jabber can learn a lot of things from this protocol, in particular about Closing Channels and Connections (2.3.7)
October 2008: Microsoft adopts AMQP and RedHat is all excited about it. Curiously, the leading open source implementation is written in Erlang, thus using two similar protocols at the same time, AMQP and Erlang's internal RPC protocol. Doesn't that make for a lot of shuffling around?
- ActiveMQ has code in the sandbox for implementing AMQP on ActiveMQ. However, the development of this code has been paused until there is further user and developer interest. Additionally, the AMQP standard is still going through major changes, and new release of the standard will made made soon (0.10). The wealth of clients available for ActiveMQ, means that there has been little need for AMQP development.
- ActiveMQ supports the OpenWire and Stomp protocols, and has very active development of Java JMS, C++, and .NET clients.