RabbitMQ-消息广播

RabbitMQ消息模型的核心理念是:发布者(producer)不会直接发送任何消息给队列。事实上,发布者(producer)甚至不知道消息是否已经被投递到队列。

发布者(producer)只需要把消息发送给一个交换机(exchange)。交换机非常简单,它一边从发布者方接收消息,一边把消息推送到队列。交换机必须知道如何处理它接收到的消息,是应该推送到指定的队列还是是多个队列,或者是直接忽略消息。这些规则是通过交换机类型(exchange type)来定义的。

有几个可供选择的交换机类型:直连交换机(direct), 主题交换机(topic), (头交换机)headers和 扇型交换机(fanout)。我们在这里主要说明最后一个 —— 扇型交换机(fanout)。先创建一个fanout类型的交换机,命名为logs:

扇型交换机(fanout)很简单,你可能从名字上就能猜测出来,它把消息发送给它所知道的所有队列。


'''
消息发布者
利用fanout扇型交换机,实现网络多播功能
只要订阅者订阅了目前交换机,都能收到发布的消息
'''


import pika
exchangename = "test01"

if __name__ == '__main__':
    connection = pika.BlockingConnection(pika.ConnectionParameters(host="192.168.1.116"))

    channel =  connection.channel()
    
    #定义一个交换机
    channel.exchange_declare(exchange=exchangename, #交换机名字
                             exchange_type = "fanout", #交换机类型
                             )
    
    channel.basic_publish(exchange=exchangename, 
                        routing_key="", #不指定队列名字,意思就是发布到所有绑定在该台交换机队列
                        body="begin test")
    
    connection.close()
    


'''
消息订阅者
利用fanout扇型交换机,实现网络多播功能
只要订阅者订阅了目前交换机,都能收到发布的消息
队列名字已经没有多少用处
'''


import pika
exchangename = "test01"
if __name__ == '__main__':
    
    connection = pika.BlockingConnection(pika.ConnectionParameters(host="192.168.1.116"))
    
    channel = connection.channel()
    
    #定义交换机
    channel.exchange_declare(exchange=exchangename,
                             type="fanout")
    #定义一个随机名字队列
    result = channel.queue_declare(exclusive=True) #系统随机生成队列名字,并返回
    queue_name = result.method.queue
    
    #绑定队列到交换器上
    channel.queue_bind(exchange=exchangename,
                       queue=queue_name)
    
    def callback(ch,method,properties,body):
        print(body)
        
    channel.basic_consume(callback, 
                          queue=queue_name, 
                          no_ack=False)
    
    channel.start_consuming()



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值