rabbitmq pika(python)订阅发布多客户端消费场景简单使用
发布端:
import pika
import time
credentials = pika.credentials.PlainCredentials('root', 'root',erase_on_connect =False)
s_conn = pika.BlockingConnection(pika.ConnectionParameters('127.0.0.1',credentials=credentials)) # 创建连接
# 原则上,消息,只能有交换机传到队列。就像我们家里面的交换机道理一样。
# 有多个设备连接到交换机,那么,这个交换机把消息发给那个设备呢,就是根据
# 交换机的类型来定。类型有:direct\topic\headers\fanout
# fanout:这个就是,所有的设备都能收到消息,就是广播。
# 此处定义一个名称为'logs'的'fanout'类型的exchange
chan = s_conn.channel() # 在连接上创建一个频道
# chan.queue_declare(queue='hello') # 声明一个队列,生产者和消费者都要声明一个相同的队列,用来防止万一某一方挂了,另一方能正常运行
chan.exchange_declare(exchange='logs',
exchange_type='fanout'
)
while 1:
time.sleep(1)
# 将消息发送到名为log的exchange中
# 因为是fanout类型的exchange,所以无需指定routing_key
ack = chan.basic_publish(exchange='logs', # 交换机
routing_key='', # 路由键,写明将消息发往哪个队列
body='Ye:当前时间%s ' % time.strftime('%m-%d %H:%M:%S')) # 生产者要发送的消息
print("[生产者] send 'hello world")
time.sleep(10)
print(ack)
s_conn.close() # 当生产者发送完消息后,可选择关闭
接收端:
import pika
credentials = pika.credentials.PlainCredentials('root', 'root',erase_on_connect =False)
s_conn = pika.BlockingConnection(pika.ConnectionParameters('39.106.205.106',credentials=credentials)) # 创建连接
chan = s_conn.channel() # 在连接上创建一个频道
chan.exchange_declare(exchange='logs',
exchange_type='fanout'
)
# chan.queue_declare(queue='hello') # 声明一个队列,生产者和消费者都要声明一个相同的队列,用来防止万一某一方挂了,另一方能正常运行
# 类似的,比如log,我们其实最想看的,当连接上的时刻到消费者退出,这段时间的日志
# 有些消息,过期了的对我们并没有什么用
# 并且,一个终端,我们要收到队列的所有消息,比如:这个队列收到两个消息,一个终端收到一个。
# 我们现在要做的是:两个终端都要收到两个
# 那么,我们就只需做个临时队列。消费端断开后就自动删除
result = chan.queue_declare(queue='temp2', exclusive=True)
# 取得队列名称
queue_name = result.method.queue
# 将队列和交换机绑定一起
chan.queue_bind(exchange='logs',
queue=queue_name
)
def callback(ch, method, properties, body): # 定义一个回调函数,用来接收生产者发送的消息
print(ch, method, properties, )
print(body.decode('utf8'))
chan.basic_consume( # 指定取消息的队列名,
queue_name,
callback, # 调用回调函数,从队列里取消息
# queue=,
auto_ack=True
) # 取完一条消息后,给生产者发送确认消息,默认是False的,即 默认不给rabbitmq发送一个收到消息的确认
# 如果auto_ack=True则消失接收之后就会删除也就是只能取一次
print('[消费者] waiting for msg .')
chan.start_consuming() # 开始循环取消息
注意
多个接收端需要修改临时队列的名字,以防止冲突,会报错关于锁的错误
rabbitmq pika(python)订阅发布多客户端消费场景简单使用的更多相关文章
- 【python】-- RabbitMQ Publish\Subscribe(消息发布\订阅)
RabbitMQ RabbitMQ Publish\Subscribe(消息发布\订阅) 1对1的消息发送和接收,即消息只能发送到指定的queue里,但这样使用有些局限性,有些时候你想让你的消息被所有 ...
- Part1.2 、RabbitMQ -- Publish/Subscribe 【发布和订阅】
python 目录 (一).交换 (Exchanges) -- 1.1 武sir 经典 Exchanges 案例展示. (二).临时队列( Temporary queues ) (三).绑定(Bind ...
- RabbitMQ下的生产消费者模式与订阅发布模式
所谓模式,就是在某种场景下,一类问题及其解决方案的总结归纳.生产消费者模式与订阅发布模式是使用消息中间件时常用的两种模式,用于功能解耦和分布式系统间的消息通信,以下面两种场景为例: 数据接入 假设 ...
- (五)RabbitMQ消息队列-安装amqp扩展并订阅/发布Demo(PHP版)
原文:(五)RabbitMQ消息队列-安装amqp扩展并订阅/发布Demo(PHP版) 本文将介绍在PHP中如何使用RabbitMQ来实现消息的订阅和发布.我使用的系统依然是Centos7,为了方便, ...
- RabbitMQ六种队列模式-发布订阅模式
前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅 [本文]RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主 ...
- python 实现redis订阅发布功能
redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...
- python学习之-- redis模块管道/订阅发布
redis 模块操作剩余其他常用操作 delete(*names):删除任意的数据类型exists(name):检测redis的name是否存在keys(pattern='*'):根据模型获取redi ...
- Redis系列(三)—— 订阅/发布
Redis 订阅/发布 参考:http://www.cnblogs.com/mushroom/p/4470006.html,http://www.tuicool.com/articles/ABry2a ...
- RabbitMQ介绍4 - 编程(C#客户端示例)
C#终端的说明文档: http://www.rabbitmq.com/dotnet-api-guide.html 这里介绍使用RabbitMQ的几种典型场景. 1. 简单direct模式( http: ...
随机推荐
- 10分钟浅谈CSRF突破原理,Web安全的第一防线!
CSRF攻击即跨站请求伪造(跨站点请求伪造),是一种对网站的恶意利用,听起来似乎与XSS跨站脚本攻击有点相似,但实际上彼此相差很大,XSS利用的是站点内的信任用户,而CSRF则是通过伪装来自受信任用户 ...
- 对于写Java的博文
其实我是有过想要自己总结java相关的知识点给大家分享,但我的Java并不很好,大多数情况我只是拿Java当工具,写一些自己所需一些简单的东西,因此,大多数碰到我不懂的Java问题时,我也是上博客园, ...
- SQL Server如何查看存储过程的执行计划
有时候,我们需要查看存储过程的执行计划,那么我们有什么方式获取存储过程的历史执行计划或当前的执行计划呢? 下面总结一下获取存储过程的执行计划的方法. 1:我们可以通过下面脚本查看存储过程的执行计划,但 ...
- python 错误信息是:sudo :apt-get:command not found
1.问题描述 错误信息是:sudo :apt-get:command not found 2.问题原因及解决 在centos下用yum install xxx yum和apt-get的区别一般来说著名 ...
- fuse3 编译相关简要记录 与 fuse3 系统调优;
下面是在使用fuse3 编译bbfs 过程中一些参数,用于备忘: FUSE_CFLAGS="-I/usr/local/include/fuse3" FUSE_LIBS=" ...
- Python添加邮件附件并通过邮件发送测试报告
import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText c ...
- mysql用户数据库只读权限提升全局权限
1.只读用户登录数据库 2.执行命令: mysql> unlock tables;mysql> set global read_only=0;
- 数位DP入门详解+题目推荐
\(update:2019-9-6\) 博客里某些东西没有解释清楚,完善了对应的解释 在开始之前,我们先来看一道题--题目链接 题目要求,相邻两位的差大于等于2,那么我们先来构造一个试一试. 比如说\ ...
- Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) F2. Wrong Answer on test 233 (Hard Version) dp 数学
F2. Wrong Answer on test 233 (Hard Version) Your program fails again. This time it gets "Wrong ...
- 基于socketserver实现并发的socket编程
目录 一.基于TCP协议 1.1 server类 1.2 request类 1.3 继承关系 1.4 服务端 1.5 客户端 1.6 客户端1 二.基于UDP协议 2.1 服务端 2.2 客户端 2. ...