栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

RabbitMQ可靠消息投递及消费消息确认、拒绝消费、预读消费

RabbitMQ可靠消息投递及消费消息确认、拒绝消费、预读消费

前言

这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题

于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。

微信小程序搜索:Python面试宝典

或可关注原创个人博客:https://lienze.tech

也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习

生产者消息 可靠消息投递

rabbitmq支持在生产者处的/confirm/i模式,用来确保在生产者投递消息时,消息被准确投递至匹配队列

如果未成功,那么将可能抛出如下异常

  • UnroutableError: 无法路由投递
  • NackError: 自身内部错误导致消息丢失
channel./confirm/i_delivery()

官方给出的示例,可以直接对test,这是一个不存在的队列进行消息投递

channel./confirm/i_delivery()
try:
    channel.basic_publish(
        exchange='',	
        routing_key='test',
        body='Hello World!',
        mandatory=True
    )
    print('Message was published')
except pika.exceptions.UnroutableError:
    print('Message was returned')

注意: 在最新版sdk中,还需要对basic_publish方法传入mandatory=True可生效确保消息可靠发送

"""
mandatory: 当mandatory参数设置为True时,如果此时交换机无法根据自身的路由键找到一个符合的队列,会调用Basic.Return命令将消息返回给生产者,此时可搭配/confirm/i_delivery进行消息结果的投递确认,/confirm/i_delivery将抛出UnroutableError异常
"""
消费者消息 消息确认

消费者接收到或处理完消息后,可以对消息进行确认

这个值可以在消费者中的接口进行自动ack设置,或者关闭,在消费业务成功后手动进行ack

basic_consume(self, ..., auto_ack=False...)
"""
auto_ack: 是否开启自动确认
"""
def callback(self, ch, method, properties, body):
    print(body.decode())
    print(method.delivery_tag)
    ch.basic_ack(delivery_tag=method.delivery_tag)

注意: 未被ack确认的消息,日后还会回到队列中,要注意避免重复消费

拒绝消息

如果当消费业务出现了异常或消费数据此时不可抗出错,那么可以通过如下两款api进行消息的取消确认

basic_nack(delivery_tag=0, multiple=False, requeue=True)
"""
delivery_tag: 消息交付id
multiple: up to and including 是否拒绝截止到目前delivery_tag之前所有的消息
requeue: 是否重放队列
"""
basic_reject(delivery_tag=0, requeue=True)
"""
delivery_tag: 消息交付id
requeue: 是否重放队列
"""

注意: 单个消费者操作时,无穷进行消息重放拒绝而导致消息业务成为死循环

预读消息

每次消费者的consumer的队列消息读取,并不是一次只取一个任务

在连接通道处,有一定大小基于滑动窗口的消息量大小获取,这个值可以通过如下api进行设置

channel.basic_qos(prefetch_count=10)

注意是基于信道channle的,不是连接connection的

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/681568.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号