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使用urllib2提交http post请求的方法
May 26 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
Apr 23 Python
python的中异常处理机制
Aug 30 Python
Python实现图片转字符画的代码实例
Feb 22 Python
Python列表与元组的异同详解
Jul 02 Python
Python之修改图片像素值的方法
Jul 03 Python
python写程序统计词频的方法
Jul 29 Python
python自动分箱,计算woe,iv的实例代码
Nov 22 Python
tensorflow 报错unitialized value的解决方法
Feb 06 Python
Django choices下拉列表绑定实例
Mar 13 Python
通俗易懂了解Python装饰器原理
Sep 17 Python
python利用opencv保存、播放视频
Nov 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脚本的测试方法
2015/08/05 PHP
PHP微信分享开发详解
2017/01/14 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
JavaScript Prototype对象
2009/01/07 Javascript
javascript ajax 仿百度分页函数
2013/10/29 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
js实现倒计时时钟的示例代码
2013/12/17 Javascript
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
浅谈javascript中字符串String与数组Array
2014/12/31 Javascript
jquery插件splitScren实现页面分屏切换模板特效
2015/06/16 Javascript
实例讲解JS中setTimeout()的用法
2016/01/28 Javascript
jQuery选择器之属性过滤选择器详解
2017/09/28 jQuery
详解ECMAScript typeof用法
2018/07/25 Javascript
微信小程序实现同时上传多张图片
2020/02/03 Javascript
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
vue实现五子棋游戏
2020/05/28 Javascript
详解VUE中的插值( Interpolation)语法
2020/10/18 Javascript
[00:32]2018DOTA2亚洲邀请赛Mineski出场
2018/04/04 DOTA
TensorFlow用expand_dim()来增加维度的方法
2018/07/26 Python
基于python实现聊天室程序
2018/07/27 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
对python创建及引用动态变量名的示例讲解
2018/11/10 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
深入浅析css3 中display box使用方法
2015/11/25 HTML / CSS
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
大学生收银员求职信分享
2014/01/02 职场文书
合同协议书格式
2014/04/18 职场文书
献爱心大型公益活动策划方案
2014/09/15 职场文书
2014年组织部工作总结
2014/11/14 职场文书
违纪检讨书范文
2015/01/27 职场文书
2015年爱国卫生月活动总结
2015/03/26 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书
销售人员管理制度
2015/08/06 职场文书