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 相关文章推荐
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
Apr 25 Python
pymongo为mongodb数据库添加索引的方法
May 11 Python
python基于phantomjs实现导入图片
May 13 Python
python用reduce和map把字符串转为数字的方法
Dec 19 Python
python 获取当天每个准点时间戳的实例
May 22 Python
Python使用sqlalchemy模块连接数据库操作示例
Mar 13 Python
Django学习笔记之为Model添加Action
Apr 30 Python
详解用python写网络爬虫-爬取新浪微博评论
May 10 Python
python读写csv文件方法详细总结
Jul 05 Python
python如何求100以内的素数
May 27 Python
python文件操作seek()偏移量,读取指正到指定位置操作
Jul 05 Python
class类在python中获取金融数据的实例方法
Dec 10 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/11/25 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
解析:通过php socket并借助telnet实现简单的聊天程序
2013/06/18 PHP
codeigniter中实现一次性加载多个view的方法
2015/03/20 PHP
浅谈php的优缺点
2015/07/14 PHP
php实现图片上传并进行替换操作
2016/03/15 PHP
PHP字符串与数组处理函数用法小结
2020/01/07 PHP
看了就知道什么是JSON
2007/12/09 Javascript
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
2013/10/17 Javascript
javascript的事件触发器介绍的实现
2014/06/05 Javascript
如何屏蔽防止别的网站嵌入框架代码
2015/08/24 Javascript
利用Vue2.x开发实现JSON树的方法
2018/01/04 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
Layui带搜索的下拉框的使用以及动态数据绑定方法
2019/09/28 Javascript
vue-父子组件和ref实例详解
2019/11/10 Javascript
微信小程序实现按字母排列选择城市功能
2019/11/25 Javascript
django轻松使用富文本编辑器CKEditor的方法
2017/03/30 Python
python 对dataframe下面的值进行大规模赋值方法
2018/06/09 Python
安装python及pycharm的教程图解
2019/10/10 Python
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
名词解释型面试题(主要是网络)
2013/12/27 面试题
委托证明的格式
2014/01/10 职场文书
国税会议欢迎词
2014/01/16 职场文书
教学改革实施方案
2014/03/31 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
2014年初三班主任工作总结
2014/12/05 职场文书
2014年街道办事处工作总结
2014/12/11 职场文书
教师学期个人总结
2015/02/11 职场文书
源码解读Spring-Integration执行过程
2021/06/11 Java/Android
使用feign服务调用添加Header参数
2021/06/23 Java/Android
“鬼灭之刃”热度不减,其成功背后的原因是什么?
2022/03/22 日漫
Java字符缓冲流BufferedWriter
2022/04/09 Java/Android
优化Mysql查询的示例
2022/04/26 MySQL
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers