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 19 Python
python实现随机密码字典生成器示例
Apr 09 Python
你应该知道的python列表去重方法
Jan 17 Python
Tensorflow中使用tfrecord方式读取数据的方法
Jun 19 Python
python利用ffmpeg进行录制屏幕的方法
Jan 10 Python
Python 中Django安装和使用教程详解
Jul 03 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
Jul 22 Python
Django框架 查询Extra功能实现解析
Sep 04 Python
python3 实现函数写文件路径的正确方法
Nov 27 Python
Python如何基于smtplib发不同格式的邮件
Dec 30 Python
SpringBoot首页设置解析(推荐)
Feb 11 Python
Pytorch反向传播中的细节-计算梯度时的默认累加操作
Jun 05 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
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
如何使用php判断所处服务器操作系统的类型
2013/06/20 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
2014/06/23 PHP
常见的四种POST 提交数据方式(小总结)
2015/10/08 PHP
php防止用户重复提交表单
2015/11/02 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
2014/06/20 Javascript
JavaScript使用concat连接数组的方法
2015/04/06 Javascript
js实现一键复制功能
2017/03/16 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
CentOS环境中MySQL修改root密码方法
2018/01/07 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
2018/01/18 Javascript
js正则表达式校验指定字符串的方法
2018/07/23 Javascript
4个顶级开源JavaScript图表库
2018/09/29 Javascript
Vue批量图片显示时遇到的路径被解析问题
2019/03/28 Javascript
mpvue性能优化实战技巧(小结)
2019/04/17 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
Python+Turtle动态绘制一棵树实例分享
2018/01/16 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
Python多进程原理与用法分析
2018/08/21 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
基于Python函数和变量名解析
2019/07/19 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
Python是怎样处理json模块的
2020/07/16 Python
python打包多类型文件的操作方法
2020/09/21 Python
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
Yummie官方网站:塑身衣和衣柜必需品
2019/10/29 全球购物
教师演讲稿范文
2014/01/08 职场文书
初一科学教学反思
2014/01/27 职场文书
出国留学经济担保书
2014/04/01 职场文书
装饰工程师岗位职责
2014/06/08 职场文书
2015年试用期工作总结
2014/12/12 职场文书
微信小程序和php的登录实现
2021/04/01 PHP
MySQL创建高性能索引的全步骤
2021/05/02 MySQL
jQuery实现广告显示和隐藏动画
2021/07/04 jQuery