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 01 Python
教大家玩转Python字符串处理的七种技巧
Mar 31 Python
Python实例方法、类方法、静态方法的区别与作用详解
Mar 25 Python
python画微信表情符的实例代码
Oct 09 Python
Numpy与Pytorch 矩阵操作方式
Dec 27 Python
TensorFlow查看输入节点和输出节点名称方式
Jan 04 Python
关于python pycharm中输出的内容不全的解决办法
Jan 10 Python
Python实现不规则图形填充的思路
Feb 02 Python
Python如何实现邮件功能
May 27 Python
利用python 下载bilibili视频
Nov 13 Python
python中添加模块导入路径的方法
Feb 03 Python
pytorch fine-tune 预训练的模型操作
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实现数据库的增删查改功能及完整代码
2018/04/18 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
jQuery+.net实现浏览更多内容(改编php版本)
2013/03/28 Javascript
js禁止页面使用右键(简单示例代码)
2013/11/13 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
2014/06/16 Javascript
分享33个jQuery与CSS3实现的绚丽鼠标悬停效果
2014/12/15 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
详解nodeJS之路径PATH模块
2017/05/31 NodeJs
Vue2路由动画效果的实现代码
2017/07/10 Javascript
js事件on动态绑定数据,绑定多个事件的方法
2018/09/15 Javascript
Nodejs把接收图片base64格式保存为文件存储到服务器上
2018/09/26 NodeJs
postman自定义函数实现 时间函数的思路详解
2019/04/17 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
JavaScript隐式类型转换代码实例
2020/05/29 Javascript
python里使用正则的findall函数的实例详解
2017/10/19 Python
浅谈Pycharm中的Python Console与Terminal
2019/01/17 Python
python绘制漏斗图步骤详解
2019/03/04 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
详解如何设置Python环境变量?
2019/05/13 Python
pytorch 求网络模型参数实例
2019/12/30 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
2020/03/16 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
详解HTML5新增标签
2017/11/27 HTML / CSS
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
2013/01/09 HTML / CSS
strstr()的简单实现
2013/09/26 面试题
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
毕业典礼演讲稿
2014/05/13 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
2014年教师节国旗下讲话稿
2014/09/10 职场文书
房屋买卖协议书范本
2014/09/27 职场文书
故宫的导游词
2015/01/31 职场文书
事业单位工作人员岗前培训心得体会
2016/01/08 职场文书
船舶调度指挥系统——助力智慧海事
2022/02/18 无线电