生产者代码

# -*- 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的更多相关文章

  1. 360开源的类Redis存储系统:Pika

    Pika 是 360 DBA 和基础架构组联合开发的类 Redis 存储系统,完全支持 Redis 协议,用户不需要修改任何代码,就可以将服务迁移至 Pika.有维护 Redis 经验的 DBA 维护 ...

  2. rabbitmq pika connection closed

    You are here: Home / rabbitmq pika connection closed rabbitmq pika connection closed By lijiejie on  ...

  3. rabbitMQ实战(一)---------使用pika库实现hello world

    rabbitMQ实战(一)---------使用pika库实现hello world 2016-05-18 23:29 本站整理 浏览(267)     pika是RabbitMQ团队编写的官方Pyt ...

  4. python的pika模块操作rabbitmq

    上一篇博文rabbitmq的构架和原理,了解了rabbitmq的使用原理,接下来使用python的pika模块实现使用rabbitmq. 环境搭建 安装python,不会的请参考Linux安装配置py ...

  5. 关于python中pika模块的问题

    工作中经常用到rabbitmq,而用的语言主要是python,所以也就经常会用到python中的pika模块,但是这个模块的使用,也给我带了很多问题,这里整理一下关于这个模块我在使用过程的改变历程已经 ...

  6. python rabbitmq的库,rabbitpy代替pika

    之前看网上都是清一色pika包的例子,就用的pika包,最大问题是非多线程安全,改为使用rabbitpy.大幅改善了pika多线程需要加锁,和外网推送延迟又不能开多线程导致推送慢的问题. rabbit ...

  7. RabbitMQ python模块pika生产者消费者轮询模型。

    完整代码如下: 生产者,producer import pika connection = pika.BlockingConnection( pika.ConnectionParameters('lo ...

  8. week06 12 后端utils cloudAMQP_client.py 安装pika

    我们回到后端 pika是专门处理RabitAMQP的包 或者你可以直接一步到位 我们不能一直让我们的网络爬虫一直爬信息 一是网络消耗很大(cpu) 二是容易被网站发现被禁ip self.connect ...

  9. pika的阻塞式使用

    [root@cloudplatform ELK]# cat startIncHouTai.py import os # 杀掉内存中的进程 cmd='pgrep -f PutDataToKafkaInc ...

  10. CentOS6.8安装360 pika

    1.安装依赖包 yum install snappy-devel bz2 libzip-dev libsnappy-dev libprotobuf-dev libevent-dev protobuf- ...

随机推荐

  1. [转帖]Unixbench服务器综合性能测试方法及工具下载

    UnixBench是一款开源的测试 unix 系统基本性能的工具,是比较通用的测试VPS性能的工具. UnixBench会执行一系列的测试,包括2D和3D图形系统的性能衡量,测试的结果不仅仅只是CPU ...

  2. [转帖]如何理解 iowait

    Linux中,%iowait 过高可能是个问题,严重的时候,它能使服务停止, 但问题是,多高才算高? 什么时候应该担心呢? 本文将讨论 iowait 的含义.相关的统计数据.原理以及 iowait的瓶 ...

  3. CentOS创建vsftp进行读写操作的简单方法

    1. 安装vsftpd yum install epel-release yum install vsftpd 2. 进入系统设置简单进行处理 注意 user_list 是不允许访问的列表. [roo ...

  4. 如何去掉 node.js 获取MySQL数据产生的RowDataPacket

    如何去掉 node.js 获取MySQL数据产生的RowDataPacket 利用JSON.stringify()把对象转为对象字符串,可去掉RowDataPacket. router.post('/ ...

  5. AsNoTracking()非跟踪数据 查询

    刚开始学习使用EF ,做项目时需要查询数据将数据显示在datagrid中,使用如下方法: query是IQueryable的 在一次看别人写的代码的时候,发现了AsNoTracking()这个方法,并 ...

  6. PaddleNLP通用信息抽取技术UIE【一】产业应用实例:信息抽取{实体关系抽取、中文分词、精准实体标。情感分析等}、文本纠错、问答系统、闲聊机器人、定制训练

    相关文章: 1.快递单中抽取关键信息[一]----基于BiGRU+CR+预训练的词向量优化 2.快递单信息抽取[二]基于ERNIE1.0至ErnieGram + CRF预训练模型 3.快递单信息抽取[ ...

  7. C++ Boost 异步网络编程基础

    Boost库为C++提供了强大的支持,尤其在多线程和网络编程方面.其中,Boost.Asio库是一个基于前摄器设计模式的库,用于实现高并发和网络相关的开发.Boost.Asio核心类是io_servi ...

  8. 驱动开发:WinDBG 常用调试命令总结

    Windbg是Microsoft公司免费调试器调试集合中的GUI的调试器,支持Source和Assembly两种模式的调试.Windbg不仅可以调试应用程序,还可以进行Kernel Debug.结合M ...

  9. P9933 [NFLSPC #6] 9.pop_book(); 题解

    题目链接: P9933 [NFLSPC #6] 9.pop_book(); 先考虑一个最基本的式子: \(x=v \times t\),很显然的一点是,除了 Alek岁,每个人的运动路程函数写出来都是 ...

  10. P7907 [Ynoi2005] rmscne题解

    题目链接:rmscne 神仙经典数据结构难题.看到求区间种类数有关的东西,需要下意识的反应到经典老题 HH的项链,这里可以学习我这篇 题解.具体学习下扫描线怎么做这类东西的. 看看本题,首先处理区间查 ...