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 相关文章推荐
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
Nov 30 Python
新手常见6种的python报错及解决方法
Mar 09 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
详解Python读取yaml文件多层菜单
Mar 23 Python
Flask框架路由和视图用法实例分析
Nov 07 Python
NumPy统计函数的实现方法
Jan 21 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
Jun 29 Python
Python OpenCV读取中文路径图像的方法
Jul 02 Python
python3处理word文档实例分析
Dec 01 Python
Python 实现RSA加解密文本文件
Dec 30 Python
python用700行代码实现http客户端
Jan 14 Python
Python字符串格式化方式
Apr 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
phpMyAdmin 安装及问题总结
2009/05/28 PHP
PHP5 面向对象(学习记录)
2009/12/02 PHP
PHP 文件上传全攻略
2010/04/28 PHP
用PHP读取和编写XML DOM的实现代码
2011/02/03 PHP
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
php实现设计模式中的单例模式详解
2014/10/11 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
2019/12/02 PHP
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
JS获取URL中的参数数据
2013/12/05 Javascript
用box固定长宽实现图片自动轮播js代码
2014/06/09 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
2014/08/01 Javascript
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
jQuery菜单插件superfish使用指南
2015/04/21 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
2016/12/05 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
详解puppeteer使用代理
2018/12/27 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
jquery html添加元素/删除元素操作实例详解
2020/05/20 jQuery
[41:08]2014 DOTA2国际邀请赛中国区预选赛 HGT VS NE
2014/05/22 DOTA
django的ORM模型的实现原理
2019/03/04 Python
python 寻找离散序列极值点的方法
2019/07/10 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
Python 基于jwt实现认证机制流程解析
2020/06/22 Python
Python 保存加载mat格式文件的示例代码
2020/08/04 Python
去除python中的字符串空格的简单方法
2020/12/22 Python
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
毕业生自我推荐
2013/11/04 职场文书
母亲80寿诞答谢词
2014/01/16 职场文书
简历中的自我评价怎么写呢?
2019/04/30 职场文书
Web前端:CSS最强总结 附详细代码
2021/03/31 HTML / CSS
Python获取指定日期是"星期几"的6种方法
2022/03/13 Python
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android