# 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,
>         )