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 BeautifulSoup中文乱码问题的2种解决方法
Apr 22 Python
在Python中使用AOP实现Redis缓存示例
Jul 11 Python
python实现快速排序的示例(二分法思想)
Mar 12 Python
python 通过logging写入日志到文件和控制台的实例
Apr 28 Python
Python正则匹配判断手机号是否合法的方法
Dec 09 Python
Python字符串逆序的实现方法【一题多解】
Feb 18 Python
python二进制文件的转译详解
Jul 03 Python
python 串口读取+存储+输出处理实例
Dec 26 Python
python画环形图的方法
Mar 25 Python
pip install 使用国内镜像的方法示例
Apr 03 Python
Python Switch Case三种实现方法代码实例
Jun 18 Python
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
Jun 03 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 增加了对 .ZIP 文件的读取功能
2006/10/09 PHP
[原创]静态页面也可以实现预览 列表不同的显示方式
2006/10/14 Javascript
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
什么是JavaScript
2009/08/13 Javascript
学习ExtJS Panel常用方法
2009/10/07 Javascript
JavaScript Event学习第四章 传统的事件注册模型
2010/02/07 Javascript
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
2012/06/14 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
JavaScript希尔排序、快速排序、归并排序算法
2016/05/08 Javascript
AngularJS路由实现页面跳转实例
2017/03/03 Javascript
Vuex mutitons和actions初使用详解
2019/03/04 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
layui自定义ajax左侧三级菜单
2019/07/26 Javascript
JS实现水平遍历和嵌套递归操作示例
2019/08/15 Javascript
基于canvasJS在PHP中制作动态图表
2020/05/30 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
在Django的form中使用CSS进行设计的方法
2015/07/18 Python
Python 对象中的数据类型
2017/05/13 Python
python中requests库session对象的妙用详解
2017/10/30 Python
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
Python3.5文件读与写操作经典实例详解
2019/05/01 Python
python orm 框架中sqlalchemy用法实例详解
2020/02/02 Python
python实现学生通讯录管理系统
2021/02/25 Python
如何给HTML标签中的文本设置修饰线
2019/11/18 HTML / CSS
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
高考自主招生自荐信
2013/10/20 职场文书
大学生饮食配送创业计划书
2014/01/04 职场文书
迎新晚会邀请函
2014/02/01 职场文书
大学专科自荐信
2014/06/17 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书
Python正则表达式中flags参数的实例详解
2022/04/01 Python
动画《新网球王子 U-17 WORLD CUP》希腊队PV公开
2022/04/02 日漫