美文网首页
RabbitMQ ack机制

RabbitMQ ack机制

作者: 風暴之灵 | 来源:发表于2019-11-12 16:34 被阅读0次

无ack模式(AcknowledgeMode.NONE)

server端行为

rabbitmq server默认推送的所有消息都已经消费成功,会不断地向消费端推送消息。

因为rabbitmq server认为推送的消息已被成功消费,所以推送出去的消息不会暂存在server端。

消息丢失的风险

当BlockingQueue<Runnable>堆满时(BlockingQueue<Delivery>一定会先满),server端推送消息会失败,然后断开connection。消费端从Socket读取Frame将会抛出SocketException,触发异常处理,shutdown掉connection和所有的channel,channel shutdown后WorkPool中的channel信息(包括channel inProgress,channel ready以及Map)全部清空,所以BlockingQueue<Runnable>中的数据会全部丢失。

此外,服务重启时也需对内存中未处理完的消息做必要的处理,以免丢失。

而在rabbitmq server,connection断掉后就没有消费者去消费这个queue,因此在server端会看到消息堆积的现象。

有ack模式(AcknowledgeMode.AUTO,AcknowledgeMode.MANUAL)

AcknowledgeMode.MANUAL模式需要人为地获取到channel之后调用方法向server发送ack(或消费失败时的nack)信息。

AcknowledgeMode.AUTO模式下,由spring-rabbit依据消息处理逻辑是否抛出异常自动发送ack(无异常)或nack(异常)到server端。

server端行为

rabbitmq server推送给每个channel的消息数量有限制,会保证每个channel没有收到ack的消息数量不会超过prefetchCount。

server端会暂存没有收到ack的消息,等消费端ack后才会丢掉;如果收到消费端的nack(消费失败的标识)或connection断开没收到反馈,会将消息放回到原队列头部。(也可以将requeue设为false,然后把消息丢入死信)

这种模式不会丢消息,但效率较低,因为server端需要等收到消费端的答复之后才会继续推送消息,当然,推送消息和等待答复是异步的,可适当增大prefetchCount提高效率。某个服务忘记 ACK 了,RabbitMQ 不会再发送数据给它,因为 RabbitMQ 认为该服务的处理能力有限。



相关文章

  • RabbitMQ ack机制

    无ack模式(AcknowledgeMode.NONE) server端行为 rabbitmq server默认推...

  • rabbitmq beam.smp cpu利用率过高

    问题:rabbitmq 的吞吐有多大?目前开启了rabbitmq的持久化/Ack 机制/用的是direct路由器。...

  • RabbitMQ的ack机制

    1、什么是消息确认ACK。 答:如果在处理消息的过程中,消费者的服务器在处理消息的时候出现异常,那么可能这条正在处...

  • 队列服务

    队列服务的ACK机制 Kafka自动提交偏移量(每隔5s提交一次)主动提交偏移量 Rabbitmq默认支持ACK没...

  • 消息队列

    1、RabbitMQ如何保证稳定性 就是保证消息不会丢失消息持久化;ACK确认机制;设置集群镜像模式;消息补偿机制...

  • rabbitmq消息ACK确认机制及发送失败处理

    rabbitmq为确保消息发送和接收成功,采用ack机制。(1)生产者producter发送消息到mq时,mq会发...

  • RabbitMQ如何保证消息99.99%被发送成功?

    1. 本篇概要 RabbitMQ针对这个问题,提供了以下几个机制来解决: 生产者确认 持久化 手动Ack 本篇博客...

  • RabbitMQ的消息确认ACK机制

    1、什么是消息确认ACK如果在处理消息的过程中,消费者的服务器在处理消息的时候出现异常,那么可能这条正在处理的消息...

  • RabbitMQ的ACK与重回队列机制

    消费端的手工ACK与NACK 当我们设置 autoACK=false 时,就开启了手工ACK模式,那么其实手工模式...

  • Kafka的ack机制

    简述kafka的ack机制 Kafka的ack机制,指的是producer的消息发送确认机制,这直接影响到Kafk...

网友评论

      本文标题:RabbitMQ ack机制

      本文链接:https://www.haomeiwen.com/subject/aurqictx.html