pika
生产者代码
# -*- coding: utf-8 -*-
# pylint: disable=C0111,C0103,R0205
import json
import pika
from pika.exchange_type import ExchangeType
print('pika version: %s' % pika.__version__)
def main():
credentials = pika.PlainCredentials('root', 'root')
parameters = pika.ConnectionParameters('192.168.133.11', credentials=credentials)
connection = pika.BlockingConnection(parameters)
channel = connection.channel()
channel.exchange_declare( # 创建交换机
exchange='test_exchange',
exchange_type=ExchangeType.direct,
passive=False,
durable=True,
auto_delete=False)
channel.queue_declare(queue='standard') # 创建队列
channel.queue_bind( # 队列绑定
queue='standard', exchange='test_exchange', routing_key='standard_key')
# 发布消息
channel.basic_publish(
exchange='test_exchange',
routing_key='standard_key',
body=json.dumps("hello world"),
properties=pika.BasicProperties(content_type='application/json'))
connection.close()
if __name__ == '__main__':
main()
消费者
import functools
import logging
import time
import pika
from pika.exchange_type import ExchangeType
LOG_FORMAT = ('%(levelname) -10s %(asctime)s %(name) -30s %(funcName) '
'-35s %(lineno) -5d: %(message)s')
LOGGER = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO, format=LOG_FORMAT)
MAX_RETRY_COUNT = 3
retry_count = 0
def on_message(chan, method_frame, header_frame, body, userdata=None):
"""Called when a message is received. Log message and ack it."""
LOGGER.info('Delivery properties: %s, message metadata: %s', method_frame, header_frame)
LOGGER.info('Userdata: %s, message body: %s', userdata, json.loads(body))
LOGGER.info("chan>>>>>>>>>>>>>>>>>>{0}, type:{1}".format(chan, type(chan))) # BlockingChannel
# 1.关闭自动回执,当auto_ack为false(默认就为false),需要自己手动回执即调用chan.basic_ack()方法
# chan.basic_ack(delivery_tag=method_frame.delivery_tag)
# 2.自动回执,当auto_ack为true时,自动回执,不需要再调用chan.basic_ack()方法
# 设置nack回执,即拒绝消费,然后重入到队列,requeue=True为默认值, 会一直重试,requeue=False时,丢弃消息
# chan.basic_nack(delivery_tag=method_frame.delivery_tag, requeue=True)
# 本地重试机制,最大3次
try:
# 模拟错误
print(1/0)
except Exception as e:
global retry_count
if retry_count < MAX_RETRY_COUNT:
# 处理失败,重新放回队列
chan.basic_recover(requeue=True)
retry_count += 1
print(f"重试次数:{retry_count}")
time.sleep(5) # 模拟延迟
else:
# 超过最大重试次数,不再消费
print("超过最大重试次数")
# 发送拒绝消费回执,同时设置requeue为False,将消息丢弃
chan.basic_nack(delivery_tag=method_frame.delivery_tag, requeue=False)
# 将该消息发送到其他队列处理
chan.basic_publish(exchange='test_exchange',
routing_key='handle_err',
body=body,
properties=pika.BasicProperties(content_type='application/json'))
chan.stop_consuming() # 停止消费
def main():
"""Main method."""
credentials = pika.PlainCredentials('root', 'root')
parameters = pika.ConnectionParameters('192.168.133.11', credentials=credentials)
connection = pika.BlockingConnection(parameters)
channel = connection.channel() # 创建信道
channel.exchange_declare( # 创建交换机
exchange='test_exchange',
exchange_type=ExchangeType.direct,
passive=False,
durable=True,
auto_delete=False)
channel.queue_declare(queue='dur_standard', durable=True) # 创建队列
channel.queue_bind( # 队列绑定
queue='dur_standard', exchange='test_exchange', routing_key='standard_key')
channel.queue_bind( # 队列绑定
queue='handle_err_queue', exchange='test_exchange', routing_key='handle_err')
channel.basic_qos(prefetch_count=1)
on_message_callback = functools.partial(
on_message, userdata='on_message_userdata')
# 消费者消费消息后的回调函数on_message_callback
# basic_consume中有auto_ack字段,默认为false,即不自动ack。
channel.basic_consume('dur_standard', on_message_callback)
try:
# 开始消费
channel.start_consuming()
except KeyboardInterrupt:
# 停止消费
channel.stop_consuming()
connection.close()
if __name__ == '__main__':
main()
pika的更多相关文章
- 360开源的类Redis存储系统:Pika
Pika 是 360 DBA 和基础架构组联合开发的类 Redis 存储系统,完全支持 Redis 协议,用户不需要修改任何代码,就可以将服务迁移至 Pika.有维护 Redis 经验的 DBA 维护 ...
- rabbitmq pika connection closed
You are here: Home / rabbitmq pika connection closed rabbitmq pika connection closed By lijiejie on ...
- rabbitMQ实战(一)---------使用pika库实现hello world
rabbitMQ实战(一)---------使用pika库实现hello world 2016-05-18 23:29 本站整理 浏览(267) pika是RabbitMQ团队编写的官方Pyt ...
- python的pika模块操作rabbitmq
上一篇博文rabbitmq的构架和原理,了解了rabbitmq的使用原理,接下来使用python的pika模块实现使用rabbitmq. 环境搭建 安装python,不会的请参考Linux安装配置py ...
- 关于python中pika模块的问题
工作中经常用到rabbitmq,而用的语言主要是python,所以也就经常会用到python中的pika模块,但是这个模块的使用,也给我带了很多问题,这里整理一下关于这个模块我在使用过程的改变历程已经 ...
- python rabbitmq的库,rabbitpy代替pika
之前看网上都是清一色pika包的例子,就用的pika包,最大问题是非多线程安全,改为使用rabbitpy.大幅改善了pika多线程需要加锁,和外网推送延迟又不能开多线程导致推送慢的问题. rabbit ...
- RabbitMQ python模块pika生产者消费者轮询模型。
完整代码如下: 生产者,producer import pika connection = pika.BlockingConnection( pika.ConnectionParameters('lo ...
- week06 12 后端utils cloudAMQP_client.py 安装pika
我们回到后端 pika是专门处理RabitAMQP的包 或者你可以直接一步到位 我们不能一直让我们的网络爬虫一直爬信息 一是网络消耗很大(cpu) 二是容易被网站发现被禁ip self.connect ...
- pika的阻塞式使用
[root@cloudplatform ELK]# cat startIncHouTai.py import os # 杀掉内存中的进程 cmd='pgrep -f PutDataToKafkaInc ...
- CentOS6.8安装360 pika
1.安装依赖包 yum install snappy-devel bz2 libzip-dev libsnappy-dev libprotobuf-dev libevent-dev protobuf- ...
随机推荐
- [转帖]Unixbench服务器综合性能测试方法及工具下载
UnixBench是一款开源的测试 unix 系统基本性能的工具,是比较通用的测试VPS性能的工具. UnixBench会执行一系列的测试,包括2D和3D图形系统的性能衡量,测试的结果不仅仅只是CPU ...
- [转帖]如何理解 iowait
Linux中,%iowait 过高可能是个问题,严重的时候,它能使服务停止, 但问题是,多高才算高? 什么时候应该担心呢? 本文将讨论 iowait 的含义.相关的统计数据.原理以及 iowait的瓶 ...
- CentOS创建vsftp进行读写操作的简单方法
1. 安装vsftpd yum install epel-release yum install vsftpd 2. 进入系统设置简单进行处理 注意 user_list 是不允许访问的列表. [roo ...
- 如何去掉 node.js 获取MySQL数据产生的RowDataPacket
如何去掉 node.js 获取MySQL数据产生的RowDataPacket 利用JSON.stringify()把对象转为对象字符串,可去掉RowDataPacket. router.post('/ ...
- AsNoTracking()非跟踪数据 查询
刚开始学习使用EF ,做项目时需要查询数据将数据显示在datagrid中,使用如下方法: query是IQueryable的 在一次看别人写的代码的时候,发现了AsNoTracking()这个方法,并 ...
- PaddleNLP通用信息抽取技术UIE【一】产业应用实例:信息抽取{实体关系抽取、中文分词、精准实体标。情感分析等}、文本纠错、问答系统、闲聊机器人、定制训练
相关文章: 1.快递单中抽取关键信息[一]----基于BiGRU+CR+预训练的词向量优化 2.快递单信息抽取[二]基于ERNIE1.0至ErnieGram + CRF预训练模型 3.快递单信息抽取[ ...
- C++ Boost 异步网络编程基础
Boost库为C++提供了强大的支持,尤其在多线程和网络编程方面.其中,Boost.Asio库是一个基于前摄器设计模式的库,用于实现高并发和网络相关的开发.Boost.Asio核心类是io_servi ...
- 驱动开发:WinDBG 常用调试命令总结
Windbg是Microsoft公司免费调试器调试集合中的GUI的调试器,支持Source和Assembly两种模式的调试.Windbg不仅可以调试应用程序,还可以进行Kernel Debug.结合M ...
- P9933 [NFLSPC #6] 9.pop_book(); 题解
题目链接: P9933 [NFLSPC #6] 9.pop_book(); 先考虑一个最基本的式子: \(x=v \times t\),很显然的一点是,除了 Alek岁,每个人的运动路程函数写出来都是 ...
- P7907 [Ynoi2005] rmscne题解
题目链接:rmscne 神仙经典数据结构难题.看到求区间种类数有关的东西,需要下意识的反应到经典老题 HH的项链,这里可以学习我这篇 题解.具体学习下扫描线怎么做这类东西的. 看看本题,首先处理区间查 ...