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不换行之end=与逗号的意思及用途
Nov 21 Python
Python实现的特征提取操作示例
Dec 03 Python
pandas中的series数据类型详解
Jul 06 Python
python和c语言的主要区别总结
Jul 07 Python
用Python画一个LinkinPark的logo代码实例
Sep 10 Python
使用Python画出小人发射爱心的代码
Nov 23 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
Dec 18 Python
基于python检查矩阵计算结果
May 21 Python
Python文件夹批处理操作代码实例
Jul 21 Python
深入浅析Python代码规范性检测
Jul 31 Python
Python多线程的退出控制实现
Aug 10 Python
Python djanjo之csrf防跨站攻击实验过程
May 14 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数组函数序列之array_unshift() 在数组开头插入一个或多个元素
2011/11/07 PHP
php数组转成json格式的方法
2015/03/09 PHP
用js实现键盘方向键翻页功能的代码
2007/06/03 Javascript
jQuery each()方法的使用方法
2010/03/18 Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
2012/09/19 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
JS异常处理的一个想法(sofish)
2013/03/14 Javascript
JS定时关闭窗口的实例
2013/05/22 Javascript
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
JS控制阿拉伯数字转为中文大写示例代码
2013/09/04 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
2014/09/09 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
react 创建单例组件的方法
2018/04/26 Javascript
JS拖拽排序插件Sortable.js用法实例分析
2019/02/20 Javascript
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
2020/04/22 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
[04:17]DOTA2完美盛典,rOtk、BurNIng携手巴图演唱《倔强》
2017/11/28 DOTA
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
用TensorFlow实现戴明回归算法的示例
2018/05/02 Python
详解基于django实现的webssh简单例子
2018/07/17 Python
python 缺失值处理的方法(Imputation)
2019/07/02 Python
工厂仓管员岗位职责
2014/01/01 职场文书
我未来的职业规划范文
2014/01/11 职场文书
高中生自我评语大全
2014/01/19 职场文书
学历公证委托书
2014/04/09 职场文书
户外宣传策划方案
2014/05/25 职场文书
幼儿园门卫岗位职责范本
2014/07/02 职场文书
会议简讯范文
2015/07/20 职场文书
银行大堂经理培训心得体会
2016/01/09 职场文书
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android