You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@qpid.apache.org by Se...@troika.ru on 2011/01/26 07:57:51 UTC
Differences between AMQP 0.10 and AMQP 1.0
Hi there,
I'm using qpid 0.6 and AMQP 0.10. Not so far ago we decided to migrate to
the latest version of qpid, which currently is 0.8.
I have looked through the AMQP 1.0 specification and discovered that it's
completely different from the previous one.
I wonder what is the analog of the exchanges and queues in the new version
of specification?
In the AMQP 0.10 I was able to create a direct exchange and multiple
bindings between it and queues. So a single message can be send to that
exchange and it will be delivered to all the bound queues. Moreover I was
able to use the same binding key to bind multiple queues to a direct
exchange.
How to emulate such a behavior by means of the address string grammar as
described here
http://qpid.apache.org/books/0.8/Programming-In-Apache-Qpid/html/ch02s04.html#section-address-string-bnf
, without any specific definitions from the previous version of the
specification (I mean without exchanges, queues, binding and routing
keys)?
Best Regards,
Sergey Zhemzhitsky
Re: Differences between AMQP 0.10 and AMQP 1.0
Posted by Se...@troika.ru.
Gordon,
Thanks for such a detailed answer. It's much clearer now.
Best Regards,
Sergey Zhemzhitsky
Gordon Sim <gs...@redhat.com>
26.01.2011 15:06
Please respond to
users@qpid.apache.org
To
users@qpid.apache.org
cc
Subject
Re: Differences between AMQP 0.10 and AMQP 1.0
On 01/26/2011 06:57 AM, Sergey_Zhemzhitsky@troika.ru wrote:
> Hi there,
>
> I'm using qpid 0.6 and AMQP 0.10. Not so far ago we decided to migrate
to
> the latest version of qpid, which currently is 0.8.
> I have looked through the AMQP 1.0 specification and discovered that
it's
> completely different from the previous one.
> I wonder what is the analog of the exchanges and queues in the new
version
> of specification?
The 1.0 specification is more general in the internal broker model it
assumes. The same sorts of messaging patterns will be possible[1].
Brokers may chose to implement those patterns using the
exchange-queue-binding model. Other brokers may map their pre-existing
models to the protocol more easily as well.
The 1.0 specification is concerned with message flow between processes
and does not mandate or constrain specific mechanisms an intermediary
such as a broker may offer for directing the flow of messages internal
to that process.
> In the AMQP 0.10 I was able to create a direct exchange and multiple
> bindings between it and queues. So a single message can be send to that
> exchange and it will be delivered to all the bound queues. Moreover I
was
> able to use the same binding key to bind multiple queues to a direct
> exchange.
>
> How to emulate such a behavior by means of the address string grammar as
> described here
>
http://qpid.apache.org/books/0.8/Programming-In-Apache-Qpid/html/ch02s04.html#section-address-string-bnf
> , without any specific definitions from the previous version of the
> specification (I mean without exchanges, queues, binding and routing
> keys)?
You can create a queue bound to a direct exchange and receive messages
from it by using an address of the form <exchange-name>/<binding-key>.
E.g. a receiver created for amq.direct/my-subject will receive any
message sent by some other API to the amq.direct exchange with routing
key my-subject. [2]
This means it will receive all messages sent by a sender created for the
same address (or indeed a sender created for any address with amq.direct
as the name where the subject of the message is explicitly set to
my-subject).
You can create multiple receivers like this and each one will receive
all the relevant messages sent to that exchange. The creation of the
subscription queue is handled by the library. If needed you can
customise that through the link properties.
If you want to have a single receiver that can receive messages through
a direct exchange with more than one subject, then at present you need
to use the x-bindings element in the link properties. E.g.
amq.direct; {link: {x-bindings:[{key:abc, key:def}]}}
That is admittedly a little uglier and we want to evolve the addressing
syntax to support a neater way for expressing more complex filters that
a single subject or subject pattern.
While addresses of the simple form name/subject will work over AMQP 1.0
when that is available, the address options starting with x- are all
somewhat protocol specific. They are temporary solutions as the
addressing evolves to cover richer cases in a protocol version neutral
manner. However by keeping those details in a single string it makes the
programs easier to modify.
[In all the above examples you can of course create a direct exchange
other than amq.direct and substitute that name].
--Gordon
[1] e.g. see the interoperability tests for the 1.0 protocol:
http://www.amqp.org/confluence/display/AMQP/1-0+Testing+Suite
[2] the spout and drain examples are useful for quickly experimenting
with addresses.
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:users-subscribe@qpid.apache.org
Re: Differences between AMQP 0.10 and AMQP 1.0
Posted by Gordon Sim <gs...@redhat.com>.
On 01/26/2011 06:57 AM, Sergey_Zhemzhitsky@troika.ru wrote:
> Hi there,
>
> I'm using qpid 0.6 and AMQP 0.10. Not so far ago we decided to migrate to
> the latest version of qpid, which currently is 0.8.
> I have looked through the AMQP 1.0 specification and discovered that it's
> completely different from the previous one.
> I wonder what is the analog of the exchanges and queues in the new version
> of specification?
The 1.0 specification is more general in the internal broker model it
assumes. The same sorts of messaging patterns will be possible[1].
Brokers may chose to implement those patterns using the
exchange-queue-binding model. Other brokers may map their pre-existing
models to the protocol more easily as well.
The 1.0 specification is concerned with message flow between processes
and does not mandate or constrain specific mechanisms an intermediary
such as a broker may offer for directing the flow of messages internal
to that process.
> In the AMQP 0.10 I was able to create a direct exchange and multiple
> bindings between it and queues. So a single message can be send to that
> exchange and it will be delivered to all the bound queues. Moreover I was
> able to use the same binding key to bind multiple queues to a direct
> exchange.
>
> How to emulate such a behavior by means of the address string grammar as
> described here
> http://qpid.apache.org/books/0.8/Programming-In-Apache-Qpid/html/ch02s04.html#section-address-string-bnf
> , without any specific definitions from the previous version of the
> specification (I mean without exchanges, queues, binding and routing
> keys)?
You can create a queue bound to a direct exchange and receive messages
from it by using an address of the form <exchange-name>/<binding-key>.
E.g. a receiver created for amq.direct/my-subject will receive any
message sent by some other API to the amq.direct exchange with routing
key my-subject. [2]
This means it will receive all messages sent by a sender created for the
same address (or indeed a sender created for any address with amq.direct
as the name where the subject of the message is explicitly set to
my-subject).
You can create multiple receivers like this and each one will receive
all the relevant messages sent to that exchange. The creation of the
subscription queue is handled by the library. If needed you can
customise that through the link properties.
If you want to have a single receiver that can receive messages through
a direct exchange with more than one subject, then at present you need
to use the x-bindings element in the link properties. E.g.
amq.direct; {link: {x-bindings:[{key:abc, key:def}]}}
That is admittedly a little uglier and we want to evolve the addressing
syntax to support a neater way for expressing more complex filters that
a single subject or subject pattern.
While addresses of the simple form name/subject will work over AMQP 1.0
when that is available, the address options starting with x- are all
somewhat protocol specific. They are temporary solutions as the
addressing evolves to cover richer cases in a protocol version neutral
manner. However by keeping those details in a single string it makes the
programs easier to modify.
[In all the above examples you can of course create a direct exchange
other than amq.direct and substitute that name].
--Gordon
[1] e.g. see the interoperability tests for the 1.0 protocol:
http://www.amqp.org/confluence/display/AMQP/1-0+Testing+Suite
[2] the spout and drain examples are useful for quickly experimenting
with addresses.
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:users-subscribe@qpid.apache.org