Topics : Receiving messages based on a pattern

Topics are another exchange type. It allows message routing depending on a pattern, to route a message for multiple criteria. We’re going to use a topic exchange in our logging system. We’ll start off with a working assumption that the routing keys of logs will have two words: “<facility>.<severity>”.

Publisher

The publisher prepares the exchange and publish messages using a routing_key which will be matched by later filters

await channel.exchange('topic_logs', 'topic')

await await channel.publish(message, exchange_name=exchange_name, routing_key='anonymous.info')
await await channel.publish(message, exchange_name=exchange_name, routing_key='kern.critical')

Consumer

The consumer selects the combination of ‘facility’/’severity’ he wants to subscribe to:

for binding_key in ("*.critical", "nginx.*"):
    await channel.queue_bind(
        exchange_name='topic_logs',
        queue_name=queue_name,
        routing_key=binding_key
    )