AMQP is language neutral application-layer wire-protocol for asynchronous messaging. The protocol supports flow-control, guaranteed message delivery, transactions, routing, security. Rabbit MQ is a popular implementation of this protocol.
but I already have JMS?
One key difference between AMQP and JMS – is that the JMS is a API spec. whereas AMQP is a wire spec. Thus AMQP allows for greater inter-operability. i.e. AMQP client developed by vendor X can send messages to another AMQP client developed by vendor Y, without need for any bridge to translated one vendor’s wire-message to another.
Quote from wikipedia : http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol
QUOTE “AMQP mandates the behaviour of the messaging provider and client to the extent that implementations from different vendors are truly interoperable, in the same way as SMTP, HTTP, FTP, etc. have created interoperable systems. Previous attempts to standardize middleware have happened at the API level (e.g. JMS) and this did not create interoperability. Unlike JMS, which merely defines an API, AMQP is a wire-level protocol. A wire-level protocol is a description of the format of the data that is sent across the network as a stream of octets. Consequently any tool that can create and interpret messages that conform to this data format can interoperate with any other compliant tool irrespective of implementation language.” UNQOUOTE
Also AMQP offers much richer functionality than JMS in terms of routing/addressing etc.
If you are building a distributed application which needs messaging (read pub-sub / guaranteed delivery etc) – consider and evaluate using AQMP as the messaging protocol.
Also, instead of just pushing XML in and out of these brand new queues – do you want to think about JSON / Google Protocol Buffers for serializing data to/from a language neutral message.