博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RabbitMQ广播:fanout模式
阅读量:5967 次
发布时间:2019-06-19

本文共 1717 字,大约阅读时间需要 5 分钟。

一、

消息的广播需要exchange:exchange是一个转发器,其实把消息发给RabbitMQ里的exchange

fanout: 所有bind到此exchange的queue都可以接收消息,广播

direct: 通过routingKey和exchange决定的那个唯一的queue可以接收消息

topic:所有符合routingKey(此时可以是一个表达式)的routingKey所bind的queue可以接收消息

headers:通过headers来决定把消息发给哪些queue,用的比较少

原理图:

发布者端:

'''发布者publisher'''import pikaimport sysconnection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))channel = connection.channel()channel.exchange_declare(exchange='logs',  # exchange名字为logs                         type='fanout')# 通过命令行自己输入消息,没输入就是hello worldmessage = ' '.join(sys.argv[1:]) or "info: Hello World!"# 广播不需要写queue,routing_key为空channel.basic_publish(exchange='logs',                      routing_key='',                      body=message)print("send :", message)connection.close()

订阅者端:

'''订阅者subscriber'''import pikaconnection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))channel = connection.channel()channel.exchange_declare(exchange='logs',                         type='fanout')# 不指定queue名字,rabbit会随机分配一个唯一的queue,# exclusive=True会在使用此queue的消费者断开后,自动将queue删除# 发送端没有声明queue,为什么接收端需要queue?看上面原理图就明白result = channel.queue_declare(exclusive=True)# 拿到的随机的queue名字queue_name = result.method.queue# 需要知道从哪个转发器上去收所以需要绑定channel.queue_bind(exchange='logs',                   queue=queue_name)print("Wait for logs...")def callback(ch, method, properties, body):    print("received:", body)channel.basic_consume(callback,                      queue=queue_name,                      no_ack=True)channel.start_consuming()

 运行结果:

'''先启动发布者,再启动订阅者,为什么订阅者收不到信息?原理类似于收音机收听广播:订阅者相当于收音机,发布者相当于广播信号所以这个接收是实时的,订阅者启动之后,才能收到发布者发出的广播'''

 

posted on
2018-11-08 21:52 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/staff/p/9932294.html

你可能感兴趣的文章
Line: 220 - com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1
查看>>
oracle 常用命令大汇总
查看>>
2012年春运火车票电话和网上订票技巧、攻略
查看>>
根据request获取请求路径
查看>>
mysql 并行复制
查看>>
傲不可长,欲不可纵,乐不可极,志不可满——提高个人修养
查看>>
linux系统增加swap容量的方法
查看>>
后台调用gps
查看>>
HTML5标签的语义认知和理解(1)
查看>>
MySQL日志功能详解(2)
查看>>
HP LaserJet 305X 和 339X 系列一体机如何设置手动或自动接收传真?
查看>>
linux之权限之隐藏权限
查看>>
XDCTF成长记录
查看>>
Linux系统中的文本处理工具
查看>>
IDE---Python IDE之Eric5在window下的安装
查看>>
Mybatis调用Oracle中的存储过程和function
查看>>
telnet :No route to host
查看>>
基本安装lnmp环境
查看>>
yum源资料汇总
查看>>
7、MTC与MTV,http请求介绍
查看>>