Routing : Receiving messages selectively

Routing is an interesting concept in RabbitMQ/AMQP: in this tutorial, messages are published to a direct exchange with a specific routing_key (the log severity The consumer create a queue, binds the queue to the exchange and specifies the severity he wants to receive.

Publisher

The publisher creater the direct exchange:

await channel.exchange(exchange_name='direct_logs', type_name='direct')

Message are published into that exchange and routed using the severity for instance:

await channel.publish(message, exchange_name='direct_logs', routing_key='info')

Consumer

The consumer may subscribe to multiple severities. To accomplish this purpose, it create a queue bind this queue multiple time using the (exchange_name, routing_key) configuration:

result = await channel.queue(queue_name='', durable=False, auto_delete=True)

queue_name = result['queue']

severities = sys.argv[1:]
if not severities:
    print("Usage: %s [info] [warning] [error]" % (sys.argv[0],))
    sys.exit(1)

for severity in severities:
    await channel.queue_bind(
        exchange_name='direct_logs',
        queue_name=queue_name,
        routing_key=severity,
    )