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 字典与字符串的互转实例
Jan 13 Python
python3中set(集合)的语法总结分享
Mar 24 Python
浅谈python函数之作用域(python3.5)
Oct 27 Python
Python线性方程组求解运算示例
Jan 17 Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
Mar 23 Python
Python Django框架模板渲染功能示例
Nov 08 Python
关于Keras模型可视化教程及关键问题的解决
Jan 24 Python
详解Python中的分支和循环结构
Feb 11 Python
python标准库sys和OS的函数使用方法与实例详解
Feb 12 Python
python+opencv实现移动侦测(帧差法)
Mar 20 Python
基于Python测试程序是否有错误
May 16 Python
python基于turtle绘制几何图形
Jun 15 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使用xmllint命令处理xml与html的方法
2014/12/15 PHP
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
Zend Framework动作助手Url用法详解
2016/03/05 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
JS操作CSS随机改变网页背景实现思路
2014/03/10 Javascript
jQuery使用之处理页面元素用法实例
2015/01/19 Javascript
深入浅析Bootstrap列表组组件
2016/05/03 Javascript
JS定义类的六种方式详解
2016/05/12 Javascript
javascript js 操作数组 增删改查的简单实现
2016/06/20 Javascript
ajax异步请求详解
2017/01/06 Javascript
Angular.js中$resource高大上的数据交互详解
2017/07/30 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
2018/01/21 Javascript
js中getBoundingClientRect的作用及兼容方案详解
2018/02/01 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
高性能web服务器框架Tornado简单实现restful接口及开发实例
2014/07/16 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
Python中的并发处理之asyncio包使用的详解
2018/04/03 Python
Python实现接受任意个数参数的函数方法
2018/04/21 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
2019/03/18 Python
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
python 读取数据库并绘图的实例
2019/12/03 Python
使用Python进行防病毒免杀解析
2019/12/13 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
详解python对象之间的交互
2020/09/29 Python
CSS3实现千变万化的文字阴影text-shadow效果设计
2016/04/26 HTML / CSS
跑步爱好者一站式服务网站:Jack Rabbit
2016/09/01 全球购物
全球最大的在线橄榄球商店:Lovell Rugby
2018/05/20 全球购物
就职演讲稿范文
2014/05/19 职场文书
领导班子整改方案
2014/10/25 职场文书
门店店长岗位职责
2015/04/14 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
MySQL创建管理LIST分区
2022/04/13 MySQL
Redis高并发缓存架构性能优化
2022/05/15 Redis