美文网首页RabbitMQ
如何解决RabbitMQ的消息堆积和消息丢失

如何解决RabbitMQ的消息堆积和消息丢失

作者: 倚仗听江 | 来源:发表于2020-11-27 13:47 被阅读0次

一. 消息堆积

消息堆积一般来说就是消息发送的速率大于消息消费的速率造成的。
解决方案:

  1. 增加消费者以及后端其他服务组件的吞吐能力。
  2. 增加消费者的多线程处理
  3. 根据不同的业务实现不同的丢弃任务,选择不同的策略淘汰任务,例如FIFO/LRU等。
  4. 默认情况下,rabbitmq消费者为单线程串行消费,设置并发消费两个关键属性concurrentConsumers和prefetchCountoncurrentConsumers设置的是对每个listener在初始化的时候设置的并发消费者的个数,prefetchCount是每次一次性从broker里面取的待消费的消息的个数。

二. 消息丢失

  • 持久化
  • ACK手动确认
    消息在生产者、消费队列、消费者中都有可能发生丢失。
  1. 在生产者中丢失
    原因:生产者发送消息成功,但MQ没收到该消息,消息在从生产者传输到MQ的过程中丢失,一般由网络不稳定造成。
    解决方案:发送方采用消息确认机制,当消息成功被MQ接收到后,会给生产者发送一个确认消息,表示接收成功。
  2. 在MQ中丢失
    原因:消息发送到MQ后,消息还没被消费却在MQ中丢失了。比如MQ服务器宕机或者未进行持久化进行了重启。
    解决方案:持久化交换机、队列、消息。确保MQ服务器重启时仍然能从磁盘恢复对应的交换机,队列和消息。然后我们把MQ做多台分布式集群,防止出现所有的MQ服务器挂掉。注意:交换机、队列、消息都要持久化。


    交换机持久化.png
    队列持久化.png
    消息持久化.png
  3. 在消费者中丢失
    原因:默认消费者消费消息时,设置的是自动回复MQ,收到了消息。MQ会立刻删除自身保存的这条消息,如果消息已经在MQ中被删除,但消费者的业务处理出现异常或消费者服务宕机,那么就会导致该消息没有处理成功从而导致消息丢失。
    解决方案:设置手动ACK。

相关文章

  • 如何解决RabbitMQ的消息堆积和消息丢失

    一. 消息堆积 消息堆积一般来说就是消息发送的速率大于消息消费的速率造成的。解决方案: 增加消费者以及后端其他服务...

  • RabbitMQ总结

    生产者、交换机、队列、消费者关系 如何保证RabbitMQ的高可用 避免消息堆积 避免消息丢失 如何保证不重复消费...

  • RabbitMQ面试题:如何确保消息不丢失? --- 2022-

    RabbitMq如何确保消息不丢失? RabbitMQ主要通过持久化机制,确保消息不丢,RabbitMQ持久化机制...

  • 如何保证RabbitMQ消息100%成功

    如何保证RabbitMQ消息100%不丢失 很多后台业务团队做消息通知时,选择rabbitmq,Springboo...

  • RabbitMQ延迟消息:死信队列 | 延迟插件 | 二合一用法

    前言 前段时间写过一篇:[# RabbitMQ:消息丢失 | 消息重复 | 消息积压的原因+解决方案+网上学不到的...

  • 07-RabbitMQ持久化

    一、概念 手动应答解决的是任务不丢失的情况,但是如何保障当 RabbitMQ 服务停掉以后消息生产者发送过来的消息...

  • SpringBoot整合RabbitMQ——RabbitMQ进阶

    rabbitMQ如何保证如果消息发送失败,保证其消息不丢失、怎么设置消息过期时间以及死信队列是如何在消息消费失败时...

  • 2021-05-24

    事务的特性, 事务的隔离级别 死锁怎么解决 分布式事务怎么实现 rabbitmq消息的顺序和消息的堆积 防止重复提...

  • 消息队列

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

  • 消息丢失、积压、重复解决方案

    以下解决方案都以rabbitmq为例 一、消息丢失 可能出现的场景1: 消息生产者和mq服务器之间的网络突然中断,...

网友评论

    本文标题:如何解决RabbitMQ的消息堆积和消息丢失

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