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爬虫入门教程之点点美女图片爬虫代码分享
Sep 02 Python
python模拟登录并且保持cookie的方法详解
Apr 04 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
Apr 23 Python
python处理数据,存进hive表的方法
Jul 04 Python
Python不同目录间进行模块调用的实现方法
Jan 29 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
Aug 13 Python
python对常见数据类型的遍历解析
Aug 27 Python
Python使用Excel将数据写入多个sheet
May 16 Python
Django QuerySet查询集原理及代码实例
Jun 13 Python
Python faker生成器生成虚拟数据代码实例
Jul 20 Python
关于的python五子棋的算法
May 02 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小教程之实现双向链表
2014/06/12 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
2019/11/09 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
JavaScript中的Document文档对象
2008/01/16 Javascript
javascript instanceof 与typeof使用说明
2010/01/11 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
JS打印组合功能
2016/08/04 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
vue.js 中使用(...)运算符报错的解决方法
2018/08/09 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
2019/11/16 Javascript
VuePress 中如何增加用户登录功能
2019/11/29 Javascript
javascript canvas API内容整理
2020/02/16 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
vue路由的配置和页面切换详解
2020/09/09 Javascript
[10:42]Team Liquid Vs Newbee
2018/06/07 DOTA
Python中扩展包的安装方法详解
2017/06/14 Python
关于Python正则表达式 findall函数问题详解
2018/03/22 Python
Selenium的使用详解
2018/10/19 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
印度领先的在线时尚商店:Koovs
2016/08/28 全球购物
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
吉列剃须刀英国官网:Gillette英国
2019/03/28 全球购物
What is EJB
2016/07/22 面试题
销售冠军获奖感言
2014/02/03 职场文书
机房搬迁方案
2014/05/01 职场文书
党委书记个人对照检查材料
2014/09/15 职场文书
夫妻双方自愿离婚协议书怎么写
2014/12/01 职场文书
应用最多的公文《通知》如何写?
2019/04/02 职场文书
python字符串常规操作大全
2021/05/02 Python
oracle重置序列从0开始递增1
2022/02/28 Oracle