一、安装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的更多相关文章

  1. Python操作RabbitMQ

    RabbitMQ介绍 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,RabbitMQ是一个消息代理,从“生产者”接收消息并传递消 ...

  2. 用 Python、 RabbitMQ 和 Nameko 实现微服务

    用 Python. RabbitMQ 和 Nameko 实现微服务 原创 07-17 17:57 首页 Linux中国 "微服务是一股新浪潮" - 现如今,将项目拆分成多个独立的. ...

  3. Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy   Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用 ...

  4. python - 操作RabbitMQ

    python - 操作RabbitMQ     介绍 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议.MQ全称为Mess ...

  5. 文成小盆友python-num12 Redis发布与订阅补充,python操作rabbitMQ

    本篇主要内容: redis发布与订阅补充 python操作rabbitMQ 一,redis 发布与订阅补充 如下一个简单的监控模型,通过这个模式所有的收听者都能收听到一份数据. 用代码来实现一个red ...

  6. Python之路第十二天,高级(4)-Python操作rabbitMQ

    rabbitMQ RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(M ...

  7. Python与RabbitMQ交互

    RabbitMQ 消息队列 成熟的中间件RabbitMQ.ZeroMQ.ActiveMQ等等 RabbitMQ使用erlang语言开发,使用RabbitMQ前要安装erlang语言 RabbitMQ允 ...

  8. python中RabbitMQ的使用(安装和简单教程)

    1,简介 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,RabbitMQ是一个消息代理,从"生产者"接收消息 ...

  9. Python之RabbitMQ的使用

    今天总结一下Python关于Rabbitmq的使用 RabbitMQ官网说明,其实也是一种队列,那和前面说的线程queue和进程queue有什么区别呢? 线程queue只能在同一个进程下进行数据交互 ...

随机推荐

  1. caffe中的BatchNorm层

    在训练一个小的分类网络时,发现加上BatchNorm层之后的检索效果相对于之前,效果会有提升,因此将该网络结构记录在这里,供以后查阅使用: 添加该层之前: layer { name: "co ...

  2. oracle数据库之数组的操作样例

    1.创建bean对象 --创建bean对象 CREATE OR REPLACE TYPE "FM_FLOWCPHDTSWJJIMPBEAN" as object ( wf_no ) ...

  3. linux 查找文件的命令

    http://www.ruanyifeng.com/blog/2009/10/5_ways_to_search_for_files_using_the_terminal.html

  4. 本机,同机房,同城,异地,不同城,腾讯云ping延时值

    本机,同机房,同城,异地,不同城,腾讯云ping延时值 ping本机: 0.01ms ping同机房机器: 0.1ms ping同城机器: 1ms ping不同城机器: 20ms 北(南)方ping南 ...

  5. Oracle 遇到的问题 (1)

    1.ORA-01502:索引'DBEPMS.SYS_C009390'或这类索引的分区处于不可用状态 解决方法:[注 索引命名规则 IX_表名简称_列名简称/IX_表名简称_序号(索引长度在30字符以内 ...

  6. 百度echarts

    <!DOCTYPE html> <head> <meta charset="utf-8"> <title>ECharts</t ...

  7. AFN和ASI区别

    AFN和ASI区别 一.AFN和ASI的区别 1.底层实现1> AFN的底层基于OC的NSURLConnection和NSURLSession2> ASI的底层基于纯C语言的CFNetwo ...

  8. kibana 使用

    统计IP前五的数据 统计相应时间 状态码统计 统计IP地图

  9. SQL SELECT INTO使用

    SQL SELECT INTO 语句可用于创建表的备份复件. SELECT INTO 语句 SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中. SELECT INTO 语句常用 ...

  10. php定时任务

    ignore_user_abort(); //关掉浏览器,PHP脚本也可以继续执行. set_time_limit(0); // 通过set_time_limit(0)可以让程序无限制的执行下去 代码 ...