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获得图片base64编码示例
Jan 16 Python
python里大整数相乘相关技巧指南
Sep 12 Python
python静态方法实例
Jan 14 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
May 29 Python
python常见的格式化输出小结
Dec 15 Python
对python dataframe逻辑取值的方法详解
Jan 30 Python
Python实现数据结构线性链表(单链表)算法示例
May 04 Python
Ubuntu18.04下python版本完美切换的解决方法
Jun 14 Python
Django框架创建mysql连接与使用示例
Jul 29 Python
python 如何去除字符串头尾的多余符号
Nov 19 Python
python Popen 获取输出,等待运行完成示例
Dec 30 Python
python 实现任务管理清单案例
Apr 25 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
Search Engine Friendly的URL设计
2006/10/09 PHP
php 各种应用乱码问题的解决方法
2010/05/09 PHP
php empty()与isset()区别的详细介绍
2013/06/17 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
2014/01/17 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
2015/09/25 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
thinkPHP模板算术运算相关函数用法分析
2016/07/12 PHP
深入解析PHP底层机制及相关原理
2020/12/11 PHP
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
使用Bootstrap美化按钮实例代码(demo)
2017/02/03 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
js canvas画布实现高斯模糊效果
2018/11/27 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
你不知道的SpringBoot与Vue部署解决方案
2020/11/09 Javascript
python删除服务器文件代码示例
2018/02/09 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
python super的使用方法及实例详解
2019/09/25 Python
python3用urllib抓取贴吧邮箱和QQ实例
2020/03/10 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
山海经纬软件测试笔试题和面试题
2013/04/02 面试题
旅游管理本科生求职信
2013/10/14 职场文书
初三物理教学反思
2014/01/21 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
失职检讨书大全
2015/01/26 职场文书
行政介绍信范文
2015/05/04 职场文书
一般纳税人申请报告
2015/05/18 职场文书
九年级语文教学反思
2016/03/03 职场文书
2016年法制宣传月活动总结
2016/04/01 职场文书
2019年度开业庆典祝福语大全!
2019/07/05 职场文书
创业计划书之少年玩具店
2019/09/05 职场文书
Go 语言下基于Redis分布式锁的实现方式
2021/06/28 Golang
html用代码制作虚线框怎么做? dw制作虚线圆圈的技巧
2022/12/24 HTML / CSS