RocketMQ的3种消息发送模式是什么?如何确保消息不丢失?
  DosddciaWHNX 2023年11月02日 26 0


RocketMQ发送消息的三种模式分别是:同步发送异步发送单向发送

1、同步发送模式(Sync)

发送方发送消息后会等待消息被成功发送到消息队列服务器并收到确认消息后才返回发送结果给调用方。这种模式下,发送方会阻塞等待Broker返回发送结果,直到收到确认消息或者超时。

  • 应用场景:对消息的可靠性和顺序性要求较高的场景。
  • 典型应用:订单支付、账单生成、库存扣减等涉及到重要业务操作的场景,需要确保消息被成功发送和持久化,并等待确认消息来保证可靠性。

2、异步发送模式(Async)

发送方发送消息后不会阻塞等待,而是立即返回一个 Future 对象给调用方。发送方在后台线程中异步等待消息发送结果,并通过回调函数处理发送结果。

  • 应用场景:对响应时间有要求的场景,通常用于提高发送吞吐量。
  • 典型应用:日志收集、用户行为追踪、实时数据采集等需要高吞吐量的场景,通过异步发送模式可以尽快发送消息并在后台线程中处理发送结果。

3、单向发送模式(Oneway)

单向发送是消息发送完之后就不管了,不管发送成功没成功,是最不可靠的一种方式。

  • 应用场景:对消息的可靠性要求较低,不需要等待确认消息的场景。
  • 典型应用:日志记录、广播通知、通知类消息等不需要关注发送结果,只需发送而无需等待响应的场景。

4、模式的选择

需要根据具体的业务需求和场景来选择合适的发送模式。例如,对于需要确保消息的可靠性和顺序性的关键业务操作,同步发送模式是一个较好的选择。而对于日志收集等高吞吐量场景,异步发送模式可以提高消息发送的效率。对于不需要关注发送结果的通知类消息,可以使用单向发送模式。

5、确保消息不丢失的几种措施

  • 消息持久化:RocketMQ支持将消息持久化到磁盘,即使发生服务器故障或重启,消息也能够得到保留。消息持久化可以通过设置消息的持久化级别来实现,包括同步刷盘(SYNC_FLUSH)和异步刷盘(ASYNC_FLUSH)等。
  • 高可用部署:通过在RocketMQ集群中使用多个Broker节点,实现高可用性部署。当某个Broker节点发生故障时,其他节点可以接管消息的处理,确保消息的可靠传输。
  • 冗余备份:可以通过设置消息的冗余备份数量,将消息在多个Broker节点上进行备份存储。即使某个节点发生故障,仍然可以从其他节点中获取备份消息,确保消息不丢失。
  • 合理的重试机制:在发送消息时,可以设置合理的重试次数和重试间隔,以应对发送失败的情况。在发送失败后,可以选择重新发送消息,直到消息成功发送为止。MQ为生产者提供了失败重试机制,同步发送和异步发送默认都是失败重试两次当然可以修改重试次数,如果多次还是失败,那么可以采取记录这条信息,然后人工采取补偿机制。
  • 监控和报警:建议设置监控和报警系统,及时监测RocketMQ集群的状态和性能指标。通过监控系统可以发现异常情况并及时采取措施来确保消息的可靠性。

综上所述,为了确保消息不丢失,可以采取消息持久化、高可用部署、冗余备份、合理的重试机制以及监控和报警等措施。这些方法可以提高消息的可靠性和系统的稳定性。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
DosddciaWHNX