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 )