Python通过RabbitMQ服务器实现交换机功能的实例教程


Posted in Python onJune 29, 2016

快速回顾一下RabbitMQ服务器的安装:

sudo apt-get install rabbitmq-server

Python使用RabbitMQ需要Pika库:

sudo pip install pika

好了,接下来我们先看交换机的工作原理:消息发送端先将消息发送给交换机,交换机再将消息发送到绑定的消息队列,而后每个接收端都能从各自的消息队列里接收到信息。

Python通过RabbitMQ服务器实现交换机功能的实例教程

下面用send.py和receive.py来模拟实现交换机的功能。send.py表示发送端,receive.py表示接收端。

receive.py:

#!/usr/bin/env python
#coding=utf8
import pika
 
connection = pika.BlockingConnection(pika.ConnectionParameters(
        'localhost'))
channel = connection.channel()
 
#定义交换机
channel.exchange_declare(exchange='messages', type='fanout')
 
#随机生成队列,并绑定到交换机上
result = channel.queue_declare(exclusive=True)
queue_name = result.method.queue
channel.queue_bind(exchange='messages', queue=queue_name)
 
def callback(ch, method, properties, body):
  print " [x] Received %r" % (body,)
 
channel.basic_consume(callback, queue=queue_name, no_ack=True)
 
print ' [*] Waiting for messages. To exit press CTRL+C'
channel.start_consuming()

上例代码中,queue_declare的参数exclusive=True表示当接收端退出时,销毁临时产生的队列,这样就不会占用资源。运行这个程序,然后使用rabbitmqctl list_exchanges命令来查看交换机信息:

Python通过RabbitMQ服务器实现交换机功能的实例教程

其中红色框就是上例定义的交换机了。再使用rabbitmqctl list_queues查看下消息队列情况:

Python通过RabbitMQ服务器实现交换机功能的实例教程

其中红色框就是随机产生的消息队列了。

send.py:

#!/usr/bin/env python
#coding=utf8
import pika
 
connection = pika.BlockingConnection(pika.ConnectionParameters(
        'localhost'))
channel = connection.channel()
 
#定义交换机
channel.exchange_declare(exchange='messages', type='fanout')
 
#将消息发送到交换机
channel.basic_publish(exchange='messages', routing_key='', body='Hello World!')
print " [x] Sent 'Hello World!'"
connection.close()

上例代码中, basic_publish方法的参数exchange被设定为相应交换机,因为是要广播出去,发送到所有队列,所以routing_key就不需要设定了。

exchange如果为空,表示是使用匿名的交换机,在上面交换机信息的图片中可以看到有amq.*这样的交换机,就是系统默认的交换机了。routing_key在使用匿名交换机的时候才需要指定,表示发送到哪个队列的意思。第一篇的例子演示了这个功能。

打开另外一个终端,执行send.py,可以观察到receive.py接收到了消息。如果有多个终端执行receive.py,那么每个receive.py都会接收到消息。

Python 相关文章推荐
深度剖析使用python抓取网页正文的源码
Jun 11 Python
Python中字符编码简介、方法及使用建议
Jan 08 Python
NumPy 如何生成多维数组的方法
Feb 05 Python
Python带动态参数功能的sqlite工具类
May 26 Python
python字符串常用方法
Jun 14 Python
python爬虫超时的处理的实例
Dec 19 Python
Python3实现的判断环形链表算法示例
Mar 07 Python
详解PyCharm+QTDesigner+PyUIC使用教程
Jun 13 Python
python自动循环定时开关机(非重启)测试
Aug 26 Python
基于TensorFlow常量、序列以及随机值生成实例
Jan 04 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
Jul 02 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
Dec 07 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
Jun 29 #Python
Python的消息队列包SnakeMQ使用初探
Jun 29 #Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
Jun 29 #Python
深入理解Python中装饰器的用法
Jun 28 #Python
Python中的迭代器与生成器高级用法解析
Jun 28 #Python
Python设计足球联赛赛程表程序的思路与简单实现示例
Jun 28 #Python
详解Python中heapq模块的用法
Jun 28 #Python
You might like
特转载一高手总结PHP学习资源和链接.
2006/12/05 PHP
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
2012/03/27 PHP
php绘制圆形的方法
2015/01/24 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
PHP执行linux命令6个函数代码实例
2020/11/24 PHP
jquery中使用循环下拉菜单示例代码
2014/09/24 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
Javascript中的getUTCDay()方法使用详解
2015/06/10 Javascript
使用AngularJS实现可伸缩的页面切换的方法
2015/06/19 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
Bootstrap登陆注册页面开发教程
2016/07/12 Javascript
AngularJS变量及过滤器Filter用法分析
2016/11/22 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
如何提升vue.js中大型数据的性能
2019/06/21 Javascript
JS代码检查工具ESLint介绍与使用方法
2020/02/04 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
[00:30]塑造者的传承礼包-戴泽“暗影之焰”套装展示视频
2014/04/04 DOTA
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
Python Matplotlib库入门指南
2015/05/18 Python
python实现带声音的摩斯码翻译实现方法
2015/05/20 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
用python爬取租房网站信息的代码
2018/12/14 Python
Python+PyQt5实现美剧爬虫可视工具的方法
2019/04/25 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
Python网络编程之使用TCP方式传输文件操作示例
2019/11/01 Python
python:目标检测模型预测准确度计算方式(基于IoU)
2020/01/18 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
英国知名小木屋定制网站:Tiger Sheds
2020/03/06 全球购物
研究生毕业鉴定
2014/01/29 职场文书
内勤主管岗位职责
2014/04/03 职场文书
学历公证书范本
2014/04/09 职场文书
大学课外活动总结
2014/07/09 职场文书
教师见习报告范文
2014/11/03 职场文书
2015年班组长工作总结
2015/04/10 职场文书
Java并发编程之原子性-Atomic的使用
2022/03/16 Java/Android