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中实现switch功能实例解析
Jan 11 Python
python实现zabbix发送短信脚本
Sep 17 Python
python 常见字符串与函数的用法详解
Nov 23 Python
谈谈Python中的while循环语句
Mar 10 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
Mar 27 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
Sep 10 Python
使用pytorch完成kaggle猫狗图像识别方式
Jan 10 Python
python列表的逆序遍历实现
Apr 20 Python
Python函数的迭代器与生成器的示例代码
Jun 18 Python
Django admin组件的使用
Oct 24 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
Jan 22 Python
python中scipy.stats产生随机数实例讲解
Feb 19 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留言本实例代码
2010/05/09 PHP
解析如何修改phpmyadmin中的默认登陆超时时间
2013/06/25 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
PHP实现的装箱算法示例
2018/06/23 PHP
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
javascript中数组中求最大值示例代码
2013/12/18 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
js获取及判断键盘按键的方法
2015/12/01 Javascript
react 创建单例组件的方法
2018/04/26 Javascript
vue router 源码概览案例分析
2018/10/09 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
2019/11/05 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
2020/07/28 Javascript
用JavaScript实现贪吃蛇游戏
2020/10/23 Javascript
python3之微信文章爬虫实例讲解
2017/07/12 Python
Python使用pyh生成HTML文档的方法示例
2018/03/10 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
Python中list的交、并、差集获取方法示例
2019/08/01 Python
python+selenium select下拉选择框定位处理方法
2019/08/24 Python
python3 mmh3安装及使用方法
2019/10/09 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
Python Socketserver实现FTP文件上传下载代码实例
2020/03/27 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
突袭HTML5之Javascript API扩展4—拖拽(Drag/Drop)概述
2013/01/31 HTML / CSS
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
大学三年的自我评价
2013/12/25 职场文书
生产部主管岗位职责
2014/01/06 职场文书
高等学院职业生涯规划书范文
2014/09/16 职场文书
2015年元旦主持词结束语
2014/12/14 职场文书
如何写新闻稿
2015/07/18 职场文书
幼儿园小班教师随笔
2015/08/14 职场文书