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()
View Code

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()
View Code

相较direct模式,接收消息时过滤的范围更广。

*.drama   ——>接收以.drama结尾的标识的数据

drama.*  ——>接收以drama.开头的标识的数据

(转自https://www.cnblogs.com/alex3714/articles/5248247.html)

posted on 2020-09-28 13:14  行而下的坏死  阅读(198)  评论(0)    收藏  举报