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/erlang make && 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 pika connection = 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只能在同一个进程下进行数据交互 ...
随机推荐
- iPhone的CSS3媒体查询
iPhone的CSS3媒体查询: 各版本的iPhone媒体查询是根据其分辨率和一些CSS3媒体查询的特性来实现媒体查询的...详见下: iPhone6的媒体查询: @media only screen ...
- LINUX 设置ll的时候显示日期的格式
1.临时更改显示样式,当回话结束后恢复原来的样式 export TIME_STYLE='+%Y-%m-%d %H:%M:%S' # 直接在命令中执行即可 2.永久改变显示样式,更改后的效果会保存 ...
- Java提高篇——对象克隆(复制)
假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short, ...
- spark编写word count
创建SparkContext对象的时候需要传递SparkConf对象,SparkConf至少需要包含spark.master和spark.app.name这两个参数,不然的话程序不能正常运行 obje ...
- mac安装paramiko
$ brew install openssl $ /usr/local/opt/openssl/bin/c_rehash $ export ARCHFLAGS="-arch x86_64&q ...
- ebs R12.2启动报错"failed to start a managed process after the maximum retry limit"
启动日志: Error --> Process (index=1,uid=1739599208,pid=4479) failed to start a managed process after ...
- oracle归档模式和非归档模式的切换
Oracle从未归档日志改成归档日志: SQL> shutdown immediate; 数据库已经关闭. 已经卸载数据库. Oracle 例程已经关闭. SQL> startup mou ...
- Leetcode: Valid Word Square
Given a sequence of words, check whether it forms a valid word square. A sequence of words forms a v ...
- composer--------------通过composer.json下载laravel包----barryvdh/laravel-debugbar
1.去Packagist网站https://packagist.org/packages/barryvdh/laravel-debugbar#dev-master找到
- nginx 配置https
firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-port=3306/ ...