Python-RabbitMQ-direct(广播模式)
direct绑定模式的,选择性接收
生产者:direct_publiser.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import pika,sys connection = pika.BlockingConnection(pika.ConnectionParameters( "localhost" )) channel = connection.channel() channel.exchange_declare(exchange = 'direct_logs' , exchange_type = 'direct' ) severity = sys.argv[ 1 ] if len (sys.argv) > 1 else 'info' #级别 message = ' ' .join(sys.argv[ 2 :]) or 'Hello World!' #消息 channel.basic_publish(exchange = 'direct_logs' , routing_key = severity, body = message) print ( ' [x] Sent %r:%r' % (severity, message)) connection.close() |
消费者:direct_consumer.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | import pika,sys connection = pika.BlockingConnection(pika.ConnectionParameters( "localhost" )) channel = connection.channel() channel.exchange_declare(exchange = 'direct_logs' , exchange_type = 'direct' ) result = channel.queue_declare(exclusive = True ) queue_name = result.method.queue #获取queue名字 severities = sys.argv[ 1 :] if not severities: sys.stderr.write( "Usage: %s [info] [warning] [error]\n" % sys.argv[ 0 ]) sys.exit( 1 ) for severity in severities: channel.queue_bind(exchange = 'direct_logs' , queue = queue_name, routing_key = severity) 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(callback, queue = queue_name, no_ack = True ) channel.start_consuming() |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步