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下的twisted框架入门指引
Apr 15 Python
在Python中操作文件之read()方法的使用教程
May 24 Python
理解Python中的With语句
Mar 18 Python
python numpy函数中的linspace创建等差数列详解
Oct 13 Python
python爬虫获取京东手机图片的图文教程
Dec 29 Python
用python制作游戏外挂
Jan 04 Python
浅谈python正则的常用方法 覆盖范围70%以上
Mar 14 Python
Python使用gRPC传输协议教程
Oct 16 Python
python requests使用socks5的例子
Jul 25 Python
python将图片转base64,实现前端显示
Jan 09 Python
Python实现验证码识别
Jun 15 Python
python两种获取剪贴板内容的方法
Nov 06 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获取twitter最新消息的方法
2015/04/14 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
jquery validator 插件增加日期比较方法
2010/02/21 Javascript
ExtJS4给Combobox设置列表中的默认值示例
2014/05/02 Javascript
js单独获取一个checkbox看其是否被选中
2014/09/22 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
2015/04/27 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
基于Vue如何封装分页组件
2016/12/16 Javascript
js以及jquery实现手风琴效果
2020/04/17 Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
2017/07/16 Javascript
Angularjs cookie 操作实例详解
2017/09/27 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
JS使用Chrome浏览器实现调试线上代码
2020/07/23 Javascript
Python的条件语句与运算符优先级详解
2015/10/13 Python
python运行时间的几种方法
2016/06/17 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
Python实现字符串匹配的KMP算法
2019/04/04 Python
Python切片操作去除字符串首尾的空格
2019/04/22 Python
Python中那些 Pythonic的写法详解
2019/07/02 Python
python绘制直方图和密度图的实例
2019/07/08 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
2020/01/04 Python
Python如何获取Win7,Win10系统缩放大小
2020/01/10 Python
Python可以实现栈的结构吗
2020/05/27 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
2021/01/18 Python
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
PAUL HEWITT手表美国站:德国北部时尚生活配饰品牌,船锚元素
2017/11/18 全球购物
员工培训心得体会
2013/12/30 职场文书
国家助学金获奖感言
2014/01/31 职场文书
幼儿园五一活动方案
2014/02/07 职场文书
《祁黄羊》教学反思
2014/04/22 职场文书
2015年母亲节活动策划方案
2015/05/04 职场文书
会计实训总结范文
2015/08/03 职场文书
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL
Redis主从复制操作和配置详情
2022/09/23 Redis