rabbitmq topic模式
publisher端:
import pika import sys connection = pika.BlockingConnection(pika.ConnectionParameters( host = "localhost" )) channel = connection.channel() channel.exchange_declare(exchange = "topic_logs", exchange_type = "topic") routing_key = sys.argv[1] if len(sys.argv) > 1 else "anonymous.info" message = "".join(sys.argv[2:]) or "Hello World!" channel.basic_publish(exchange = "topic_logs", routing_key = routing_key, body = message) print(" [x] Sent %r:%r" %(routing_key,message)) connection.close()
subscriber端:
import pika import sys connection = pika.BlockingConnection(pika.ConnectionParameters( host = "localhost" )) channel = connection.channel() channel.exchange_declare(exchange = "topic_logs", exchange_type = "topic") result = channel.queue_declare(queue = "",exclusive= True) queue_name = result.method.queue binding_keys = sys.argv[1:] if not binding_keys: sys.stderr.write("Usage: %s [binding_key]...\n" % sys.argv[0]) sys.exit(1) for binding_key in binding_keys: channel.queue_bind(exchange = "topic_logs", queue = queue_name, routing_key = binding_key) print("[*] Waiting for logs. To exit press CTRL+C") def callback(ch,method,properties,body): print(" [x] %r:%r"% (method.routing_key, body)) channel.basic_consume(on_message_callback = callback, queue = queue_name, auto_ack = True) channel.start_consuming()
相较direct模式,接收消息时过滤的范围更广。
*.drama ——>接收以.drama结尾的标识的数据
drama.* ——>接收以drama.开头的标识的数据
(转自https://www.cnblogs.com/alex3714/articles/5248247.html)
浙公网安备 33010602011771号