4.7.5. Subscribe to a Direct Exchange

Subscribing to the Default Exchange using a Copy of Messages

This is the most straight-forward method to implement. Create a receiver using an address comprised of the exchange name and the routing key. For example, create a receiver on direct exchange "finance" using the "reports" key of interest:

C++
Receiver receiver = session.createReceiver("finance/reports")
Python
receiver = session.receiver('finance/reports')
Subscribing to a Direct Exchange using a Shared Queue

Subscription using a shared queue may be created by naming the subscription queue and defining it non-exclusive. For example:

C++
Receiver receiver = session.createReceiver("finance/quick-publish;{link:{name:my-subscription, x-declare:{exclusive:False}}}");
Python
receiver = session.receiver('finance/quick-publish;{link:{name:my-subscription, x-declare:{exclusive:False}}}')
Alternatively, you may create a queue and bind it to the direct exchange using a routing key. You can do that using x-bindings. For example:
C++
Receiver receiver = session.createReceiver("my-subscription;{create: always, node:{x-bindings: [{exchange: 'finance', key: 'quick-publish'}]}}");
Python
receiver = session.receiver('my-subscription;{create: always, node:{x-bindings: [{exchange: 'finance', key: 'quick-publish'}]}}')
We have created a shared queue named "my-subscription" and bound it to the direct exchange "finance" with the key "quick-publish".
AMQP 1.0

Both Link-scoped x-declare and Node-scoped x-bindings clauses are not supported in AMQP 1.0, hence we request the capability of a shared subscription:

C++
Receiver receiver = session.createReceiver("finance/quick-publish;{node: {capabilities:[shared]}, link: {name: 'my-subscription'}}");