美文网首页
消息队列如何保证消息不丢失

消息队列如何保证消息不丢失

作者: Freedom_2725 | 来源:发表于2019-08-04 09:59 被阅读0次

消息从生产到消费可以经历三个阶段:生产阶段、存储阶段和消费阶段。

  • 生产阶段:在这个阶段,从消息在Producer创建出来,经过网络传输发送到Broker端。
  • 存储阶段: 消息在Broker端存储,如果是集群,消息会在这个阶段被复制到其他的副本上。
  • 消费阶段:Consumer从Broker上拉取消息,经过网络 传输发送在Consumer上。

在这三个阶段都存在消息可能丢失的情况。

  • 生产阶段:消息队列通常使用确认机制,来保证消息可靠传递:当你代码调用发送消息的方法,消息队列的客户端会把消息发送到Broker,Broker接受到消息会返回客户端一个确认。只要Producer收到了Broker的确认响应,就可以保证消息在生产阶段不会丢失。有些消息队列在长时间没收到发送的确认响应后,会自动重试,如果重试再失败,就会一返回值或者异常方式返回给客户端。所以在编写发送消息的代码,需要正确处理消息发送返回值或者异常,保证这个阶段消息不丢失。
  • 存储阶段:如果对消息可靠性要求非常高,可以通过配置Broker参数来避免因为宕机丢消息。对于单个节点Broker,需要配置Broker参数,在收到消息后,将消息写入磁盘再给Producer返回确认响应。如果是Broker集群,需要将Broker集群配置成:至少两个以上节点收到消息,再给客户端发送确认响应。
  • 消费阶段:消费阶段采用和生产阶段类似的确认机制来保证消息的可靠传递。Consumer收到消息后,需在执行消费逻辑后在发送确认消息。

总结:

  • 生产阶段,需要捕获消息发送错误,并重发消息
  • 存储阶段,通过配置刷盘和复制参数,让消息写入多个副本的磁盘上,来确保消息不会因为某个Broker宕机或者磁盘损坏而丢失。
  • 消费阶段:需要在处理完全部消费业务逻辑后,再发送确认消息。

相关文章

  • 消息队列如何保证消息不丢失

    消息从生产到消费可以经历三个阶段:生产阶段、存储阶段和消费阶段。 生产阶段:在这个阶段,从消息在Producer创...

  • SpringBoot整合RabbitMQ——RabbitMQ进阶

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

  • 消息队列核心-如何保证消息不丢失

    使用消息队列,绕不开的一个问题就是如何保证消息不丢失,现在主流的消息中间件都提供了完整的消息可靠性保证机制,可以确...

  • 消息队列常见问题

    如何保证消息队列的高可用? 如何保证消息不被重复消费(幂等性问题)? 如何保证消息的可靠性传输(消息丢失问题)? ...

  • RabbitMQ入门学习系列(三).消息发送接收

    快速阅读 ​ 用Rabitmq的队列管理,以及如何保证消息在队列中不丢失。通过ack的消息确认和持久化进行操作...

  • 【MQ消息】

    本文主要介绍MQ高可用性、消息幂等性、消息丢失的问题。 为什么使用消息队列?解耦、异步、削峰 如何保证消息队列的高...

  • RabbitMQ总结

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

  • 消息队列

    为什么使用消息队列?消息队列有什么优点和缺点? 如何保证消息队列高可用?如何保证消息不被重复消费? kafka,a...

  • 消息队列中:消息可靠性、重复消息、利用消息实现分布式事务

    一、如何确保消息不丢失? 1、检测消息丢失的方法 可以利用消息队列的有序性来验证是否有消息丢失。在Producer...

  • 基于redis的消息队列-RedMQ

    RedMQ 基于redis的消息队列 优点: 消息不丢失消息不重复分布式缓存锁在线安全关闭消费队列(防消息丢失)在...

网友评论

      本文标题:消息队列如何保证消息不丢失

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