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统计一个文本中重复行数的方法
Nov 19 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
Jan 18 Python
python实现m3u8格式转换为mp4视频格式
Feb 28 Python
python线程池threadpool实现篇
Apr 27 Python
python脚本生成caffe train_list.txt的方法
Apr 27 Python
python 通过 socket 发送文件的实例代码
Aug 14 Python
python提取具有某种特定字符串的行数据方法
Dec 11 Python
只需7行Python代码玩转微信自动聊天
Jan 27 Python
windows下python虚拟环境virtualenv安装和使用详解
Jul 16 Python
Python装饰器使用你可能不知道的几种姿势
Oct 25 Python
Python requests接口测试实现代码
Sep 08 Python
只用Python就可以制作的简单词云
Jun 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小马小结(方便查找后门的朋友)
2012/05/05 PHP
PHP基于yii框架实现生成ICO图标
2015/11/13 PHP
php DES加密算法实例分析
2019/09/18 PHP
用js实现上传图片前的预览(TX的面试题)
2007/08/14 Javascript
Jquery中对数组的操作代码
2011/08/12 Javascript
jquery设置按钮停顿3秒不可用
2014/03/07 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
2014/06/26 Javascript
js中this用法实例详解
2015/05/05 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
VUEJS实战之利用laypage插件实现分页(3)
2016/06/13 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
2016/08/02 Javascript
微信小程序 picker 组件详解及简单实例
2017/01/10 Javascript
bootstrap滚动监控器使用方法解析
2017/01/13 Javascript
JavaScript中附件预览功能实现详解(推荐)
2017/08/15 Javascript
vue项目中使用百度地图的方法
2018/06/08 Javascript
vue开发拖拽进度条滑动组件
2019/09/21 Javascript
[02:42]完美大师赛主赛事淘汰赛第三日观众采访
2017/11/25 DOTA
python判断windows隐藏文件的方法
2014/03/21 Python
Python字符串大小写转换拼接删除空白
2019/09/19 Python
pyftplib中文乱码问题解决方案
2020/01/11 Python
Django CSRF认证的几种解决方案
2020/03/03 Python
30行Python代码实现高分辨率图像导航的方法
2020/05/22 Python
3D动画《斗罗大陆》上线当日播放过亿
2021/03/16 国漫
Abe’s of Maine:自1979以来销售相机和电子产品
2016/11/21 全球购物
英国女性时尚精品店:THE DRESSING ROOM
2018/05/23 全球购物
写好自荐信的技巧
2013/11/08 职场文书
《夸父追日》教学反思
2014/02/26 职场文书
2014预备党员党课学习心得范文
2014/07/08 职场文书
有子女的离婚协议书怎么写(范本)
2014/09/29 职场文书
给老师的感谢信
2015/01/20 职场文书
汽车修理厂管理制度
2015/08/05 职场文书
2016幼儿园毕业感言
2015/12/08 职场文书
python读取pdf格式文档的实现代码
2021/04/01 Python
Python List remove()实例用法详解
2021/08/02 Python
Python获取指定日期是"星期几"的6种方法
2022/03/13 Python