RabbitMQ消息通信,生产者发送消息给指定的消费者的消息队列
来源:互联网 发布:epub制作软件安卓版 编辑:程序博客网 时间:2024/06/07 03:39
上一篇文章描述了,通过使用广播式的通信方式,让生产者把消息广播给每一个消费者,本节我们介绍另外一个方式,生产者可以指定消费者,把消息发送给它:
client.py
#!/usr/bin/env pythonimport pikaimport sysconnection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))channel = connection.channel()#这里指定exchange的名字为direct_log,类型为direct(直接的,指定的)channel.exchange_declare(exchange='direct_logs', exchange_type='direct')#在这里我们创建一个变量用于介绍routing_key的名字,#这样我们在发送消息的时候可以指定把消息发送给某一个消费者对应的消息队列#默认的消费者绑定的消息队列为infoseverity = sys.argv[1] if len(sys.argv) > 2 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()
server.py
#!/usr/bin/env pythonimport pikaimport sysconnection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))channel = connection.channel()#这里的exchange转换类型为direct(直接的,也可以理解为指定的)channel.exchange_declare(exchange='direct_logs', exchange_type='direct')result = channel.queue_declare(exclusive=True)queue_name = result.method.queue#这里设置需要从哪个消息队列里面获取消息,任意字符串即可#这里我们加入了提示,可以是info warning error也可以是其他的severities = sys.argv[1:]if not severities: sys.stderr.write("Usage: %s [info] [warning] [error]\n" % sys.argv[0]) sys.exit(1)#这里指定exchange的名字为direct_log,与client相对应#指定routint_key为运行时指定的消息队列的名称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()
最后我们通过现象更加深入的了解这种通信方式:在一个终端1运行python server.py info
在一个终端2运行python server.py warning
在一个终端3运行python server.py error
这样就会有三个消息队列,分别是info warning error,
然后执行python client.py info test_message 或python client.py test_message,这样终端1就会收到test_message消息
然后执行python client.py warning test_message,这样终端2就会收到test_message消息
然后执行python client.py error test_message,这样终端3就会收到test_message消息
更多信息请查询RabbitMQ官网:http://www.rabbitmq.com
阅读全文
0 0
- RabbitMQ消息通信,生产者发送消息给指定的消费者的消息队列
- RabbitMQ消息队列生产者和消费者
- RabbitMQ-理解消息通信-消费者和生产者
- SpringBoot的RabbitMQ消息队列: 一、消息发送接收第一印象
- SpringBoot的RabbitMQ消息队列: 一、消息发送接收第一印象
- rabbitmq用法--直接发送消息给队列
- RabbitMQ消息队列之二:消费者和生产者 Demo
- RabbitMQ消息通信,一个生产者和多个消费者
- 【消息队列】ActiveMQ的简单实例 - 生产者消费者模式
- 消息队列RabbitMQ和ActiveMQ的生产者流量控制
- 消息队列RabbitMQ和ActiveMQ的生产者流量控制
- 消息队列RabbitMQ和ActiveMQ的生产者流量控制
- 消息队列RabbitMQ和ActiveMQ的生产者流量控制
- RabbitMQ消息通信,一个生产者和多个消费者,广播式消息通信
- 消息队列的通信
- 消息队列RabbitMQ的安装
- RabbitMQ消息队列的总结
- RabbitMQ-理解消息通信-队列
- rostopic hz 降低
- centos如何在官网下载以前的版本
- C/C++中如何计算程序运行时间?
- Navicat for Mysql 连接失败10061
- 静态图片人脸识别 OpenCV3,Python3实现
- RabbitMQ消息通信,生产者发送消息给指定的消费者的消息队列
- Java for Web学习笔记(八六):消息和集群(1)一般性了解
- C#中获得本机ipv4的方法
- ehcache缓存技术讲解
- iOS开发—使用GCD实现多线程(单次或重复执行任务)
- Bitmap转为单色位图,打印电子签名
- DevOps和云计算在一起至关重要
- Druid--基本配置及内置监控使用
- poj