python之RabbitMQ
一、安装RabbitMQ
1. 安装erlang
|
1
2
3
4
|
tar xf otp_src_18.3.tar.gz cd otp_src_18.3 ./configure --prefix=/mapbar/app/erlangmake && make install |
2. 安装rabbitMQ
|
1
2
3
4
5
6
|
tar xf rabbitmq-server-generic-unix-3.6.0.tar.xz mv rabbitmq_server-3.6.0 /mapbar/app/ln -s /mapbar/app/rabbitmq_server-3.6.0 /mapbar/app/rabbitmq启动: cd /mapbar/app/rabbitmq/sbin/./rabbitmq-server -detached |
3.安装API
|
1
|
pip install pika |
二、Python操作RabbitMQ
1,基本用法
生产者:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
mport pikaconnection=pika.BlockingConnection(pika.ConnectionParameters(host='192.168.10.131')) #创建一个链接对象,对象中绑定rabbitmq的IP地址 channel=connection.channel() #创建一个频道 channel.queue_declare(queue='name1') #通过这个频道来创建队列,如果MQ中队列存在忽略,没有则创建 channel.basic_publish(exchange='', routing_key='name1', #指定队列名称 body='Hello World!') #往该队列中发送一个消息print(" [x] Sent 'Hello World!'")connection.close() #发送完关闭链接 |
消费者:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import pika connection = pika.BlockingConnection(pika.ConnectionParameters(host='192.168.10.131'))#创建一个链接对象,对象中绑定rabbitmq的IP地址 channel = connection.channel() #创建一个频道 channel.queue_declare(queue='name1') #通过这个频道来创建队列,如果MQ中队列存在忽略,没有则创建 def callback(ch, method, properties, body): #callback函数负责接收队列里的消息 print(" [x] Received %r" % body) channel.basic_consume(callback, #从队列里去消息 queue='name1', #指定队列名 no_ack=True) print(' [*] Waiting for messages. To exit press CTRL+C')channel.start_consuming() |
2,发布订阅
发布订阅和简单的消息队列区别在于,发布订阅会将消息发送给所有的订阅者,而消息队列中的数据被消费一次便消失。所以,RabbitMQ实现发布和订阅时,会为每一个订阅者创建一个队列,二发布者发布消息时,会将消息放置在所有相关队列中。
在RabbitMQ中,所有生产者提交的消息都有Exchange来接收,然后Exchange按照特定的策略转发到Queue进行存储,RabbitMQ提供了四种Exchange:fanout、direct、topic、header。由于header模式在实际工作中用的比较少。
发布者
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import pika connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))channel = connection.channel() channel.exchange_declare(exchange='test_fanout', type='fanout') message = '4456'channel.basic_publish(exchange='test_fanout', routing_key='', body=message)print(' [x] Sent %r' % message)connection.close() |
订阅者
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import pika connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))channel = connection.channel() channel.exchange_declare(exchange='test_fanout', #创建一个exchange type='fanout') #任何发送到Fanout Exchange的消息都会被转发到与该Exchange绑定(Binding)的所有Queue上 #随机创建队列result = channel.queue_declare(exclusive=True)queue_name = result.method.queue #绑定channel.queue_bind(exchange='test_fanout', queue=queue_name) #exchange绑定后端队列 print('<------------->') def callback(ch,method,properties,body): print(' [x] %r' % body) channel.basic_consume(callback, queue=queue_name, no_ack=True)channel.start_consuming() |
python之RabbitMQ的更多相关文章
- Python操作RabbitMQ
RabbitMQ介绍 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,RabbitMQ是一个消息代理,从“生产者”接收消息并传递消 ...
- 用 Python、 RabbitMQ 和 Nameko 实现微服务
用 Python. RabbitMQ 和 Nameko 实现微服务 原创 07-17 17:57 首页 Linux中国 "微服务是一股新浪潮" - 现如今,将项目拆分成多个独立的. ...
- Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用 ...
- python - 操作RabbitMQ
python - 操作RabbitMQ 介绍 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议.MQ全称为Mess ...
- 文成小盆友python-num12 Redis发布与订阅补充,python操作rabbitMQ
本篇主要内容: redis发布与订阅补充 python操作rabbitMQ 一,redis 发布与订阅补充 如下一个简单的监控模型,通过这个模式所有的收听者都能收听到一份数据. 用代码来实现一个red ...
- Python之路第十二天,高级(4)-Python操作rabbitMQ
rabbitMQ RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(M ...
- Python与RabbitMQ交互
RabbitMQ 消息队列 成熟的中间件RabbitMQ.ZeroMQ.ActiveMQ等等 RabbitMQ使用erlang语言开发,使用RabbitMQ前要安装erlang语言 RabbitMQ允 ...
- python中RabbitMQ的使用(安装和简单教程)
1,简介 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,RabbitMQ是一个消息代理,从"生产者"接收消息 ...
- Python之RabbitMQ的使用
今天总结一下Python关于Rabbitmq的使用 RabbitMQ官网说明,其实也是一种队列,那和前面说的线程queue和进程queue有什么区别呢? 线程queue只能在同一个进程下进行数据交互 ...
随机推荐
- Husky or C++ API - HDFS Short-Circuit Local Reads
hdfs-site.xml added: <property> <name>dfs.client.read.shortcircuit</name> <valu ...
- vim 命令加解密文件
加密文件 vim file :X (大写X,是加密 ,小写x是保存) 输入密码: 确认密码: 解除密码: vim file :set key= :wq 命令模式下,输入 /word 后回车,即查找w ...
- Livermore心法--策略篇
「三三不尽,六六无穷」就是Livermore选股法的精要,以6%设关键位,3%定突破. 可是,在买卖策略方面,却不能光靠看突破就随便买入. 以Livermore的讲法,通常一只股突破前关键位后,会有轻 ...
- Ubuntu server12.04安装JDK+Tomcat+mysql
一.安装JDK 1.首先到官网上下载jdk-7u79-linux-x64.tar.gz. 2.将jdk-7u79-linux-x64.tar.gz拷贝到/usr/lib/jdk/目录下面,这里如果没有 ...
- iOS中的__typeof与typeof
做SDK开发引入AFNetworking那么多的文件不太合适,所以这几天在精简AFNetworking,并共享中github上,https://github.com/yjh4866/Simplifie ...
- Java实现冒泡排序
冒泡排序思想就是将数列的相邻两个数比较,较大的数往后保存,小的数往前. package Sort; import java.util.Arrays; public class BubbleSort { ...
- Prototype based langue LUA
Prototype-based programming https://en.wikipedia.org/wiki/Prototype-based_programming Prototype-base ...
- sync_object not in ('TBL_Territory')
sync_objec 不包含TBL_Territory这个字段
- centos安装mono
1.查看mono最新版本 http://download.mono-project.com/sources/mono 2.安装依赖环境 sudo yum install cmake automake ...
- C++之检测文件结尾
当使用文件作为输入流时,为了确保适时的结束文件读取操作,程序要靠检查文件尾来判断该何时停止读取.常用的检查文件尾方法有两种: 两种方式均已将 fin 与文件关联,即 均已声明 fin 输入流,并已调用 ...