一个交换机绑定多个队列,使用交换机使用fanout 类型,那么会发给与之绑定的所有队列。路由key 一定要为空字符串

代码如下:
Publish

import pika
from pika.exchange_type import ExchangeTypeclass Producer(object):def __init__(self, queue_name,exchange_name, username, password, host, port, virtual_host):con_param = {"host": host,"port": port,"virtual_host": virtual_host,"credentials": pika.credentials.PlainCredentials(username, password)}# 建立连接self.con = pika.BlockingConnection(pika.ConnectionParameters(**con_param))# 声明队列self.channel = self.con.channel()self.channel.queue_declare(queue=queue_name)self.channel.exchange_declare(exchange=exchange_name, exchange_type=ExchangeType.fanout)def send_message(self,queue_name,exchange_name,routing_key, body):"""fanout 类型的交换机 routing_key 为空字符串,给所有绑定这个交换价的队列发送消息"""# 绑定交换机self.channel.queue_bind(queue=queue_name, exchange=exchange_name, routing_key="")# 发送消息self.channel.basic_publish(exchange=exchange_name, routing_key=routing_key, body=body)# 关闭通道self.channel.close()# 关闭连接self.con.close()if __name__ == '__main__':p = Producer("test", "logs","tom", "tom@tom", "localhost", 5672, "/afei")p.send_message("test", "logs","","have a good time")p1 = Producer("test01", "logs","tom", "tom@tom", "localhost", 5672, "/afei")p1.send_message("test01","logs","","good luck !")

Subscribe

import pikaclass Consumer(object):def __init__(self, queue_name, username, password, host, port, virtual_host):con_param = {"host": host,"port": port,"virtual_host": virtual_host,"credentials": pika.credentials.PlainCredentials(username, password)}# 建立连接self.con = pika.BlockingConnection(pika.ConnectionParameters(**con_param))# 创建通道self.channel = self.con.channel()self.queue_name = queue_namedef consume_message(self):def callback(ch, method, properties, body):print("ch===%r" % ch)print("method===%r" % method)print("properties===%r" % properties)print("[x] Received %r" % body)# 消费对象self.channel.basic_consume(queue=self.queue_name, on_message_callback=callback, auto_ack=True)# 开始消费self.channel.start_consuming()self.channel.close()if __name__ == '__main__':try:c = Consumer("test", "tom", "tom@tom", "localhost", 5672, "/afei")c.consume_message()except KeyboardInterrupt:exit(0)

mq 的Publish/Subscribe 模式相关推荐

  1. RabbitMQ 入门系列(11)— RabbitMQ 常用的工作模式(simple模式、work模式、publish/subscribe模式、routing模式、topic模式)

    1. simple 模式 simple 模式是最简单最常用的模式 2. work 模式 work 模式有多个消费者 消息产生者将消息放入队列.生产者系统不需知道哪一个任务执行系统在空闲,直接将任务扔到 ...

  2. ZeroMQ(java)之Publish/Subscribe模式

    前面的文章介绍了比较简单的Request/Subscribe模式, 这篇文章介绍更为经典的Publish/Subscribe通信模式用来ZeroMQ的实现,其通信方式如下图: 客户端(subscrib ...

  3. Publish/SubScribe(发布/订阅)模式

    前言 上一篇文章中,我们讲了如何利用Observer(观察者)模式实现多选框的全选, 本篇文章将带来Publish/SubScribe模式,并且利用该模式实现一个简易的消息通知功能,文章的最后还与Ob ...

  4. javascript设计模式——Publish/Subscribe

    推荐阅读http://dev.housetrip.com/2014/09/15/decoupling-javascript-apps-using-pub-sub-pattern/ 我们先引出问题的所在 ...

  5. 实现OPC UA publish/subscribe单次发送

    最近一直在写OPC UA publish/subscribe 模式的程序,发现程序设置好之后,数据就源源不断地发出来了.但是令人困惑的是变量值明明没有改变,数据会连续不断地重复发送,根本停不下来 .网 ...

  6. RabbitMQ发布/订阅模式(Publish/Subscribe)

    工作队列模式是直接在生产者与消费者里声明好一个队列,这种情况下消息只会对应同类型的消费者. 举个用户注册的列子:用户在注册完后一般都会发送消息通知用户注册成功(失败).如果在一个系统中,用户注册信息有 ...

  7. RabbitMQ工作模式Publish/Subscribe发布订阅,test测试代码

    RabbitMQ有以下几种工作模式 : 1.Work queues  工作队列 2.Publish/Subscribe 发布订阅 3.Routing      路由 4.Topics        通 ...

  8. 【RabbitMQ】基础三:发布与订阅模式(Publish/Subscribe)

    [RabbitMQ]基础三:发布与订阅模式(Publish/Subscribe) 1. 订阅模式 2. 发布与订阅模式说明 3. 代码示例 3.1 生产者 3.2 消费者 3.3 测试 4. 总结 1 ...

  9. Publish/Subscribe 发布与订阅模式

    Publish/Subscribe 发布与订阅: 通过交换机来实现,一个生产者可以让不同队列的消费者同时得到消息 生产者: package Fanout; import com.rabbitmq.cl ...

  10. Python操作Rabbit MQ的5种模式

    python版本:   2.7.14 一 消息生产者代码: 1 # -*- coding: utf-8 -*- 2 3 import json 4 import pika 5 import urlli ...

最新文章

  1. redis分布式锁实现思路
  2. Delphi_04_Delphi_Object_Pascal_基本语法_02
  3. mysql去掉两个最高分_数据分析系列 16/32 | MySQL中子查询与联合查询
  4. C++11新特性的总结
  5. PTA5-53 两个有序序列的中位数
  6. Redis Cluster集群的配置
  7. 906. 超级回文数
  8. varnish---vcl语法
  9. # simulink高级应用-matlab function中查看变量
  10. 为什么要给软件做测试?如何测试呢?
  11. 四个月宝宝厌奶期症状?
  12. Unix/Linux编程:Xinu中的进程
  13. 3dmax 管子动画_3DMax水管里流水的动画怎么做呢?
  14. air换电池 macbook_macbook怎么换电池?macbook换电池图文教程
  15. 什么是软件测试?软件测试的目的和流程是什么?——入门软件测试
  16. Android studio 试用小技巧
  17. 局域网访问提示无法访问检查拼写_我的电脑是win10系统,局域网共享打印机,提示windows无法访问,请检查名称的拼写.否则网络可能有问题,...
  18. 美国Disqus、国内JiaThis、友言、评论啦、搜狐畅言 评论系统(第三方评论系统)
  19. hive 创建分区表 删除分区表 插入分区表
  20. php检测网页连接速度,xyphp.com

热门文章

  1. GlassFish漏洞总结复现
  2. python下载谷歌地图瓦片_Python地图可视化之Folium更换地图瓦片(Map Tiles)
  3. 如何通过数据分析进行活动效果评估
  4. 【雅思大作文考官范文】——第六篇: 'parenting course' essay
  5. The CDB process terminated
  6. python中value的含义_python中value的意思
  7. java.lang.UnsatisfiedLinkError解决方法汇集(转载)
  8. start-stop-daemon 用法
  9. linux 限制单个ip流量,centos 的单ip流量控制-CentOS下利用iptables限速及限制每IP连接数...
  10. 终止python程序的死循环_终的解释|终的意思|汉典“终”字的基本解释