RabbitMQ如何保证消息可靠性?

RabbitMQ如何保证消息可靠性?

关键词:RabbitMQ、消息不丢失、消息可靠性、持久化、消息重复消费。

本篇文章不再介绍RabbitMQ具体实现原理,直接介绍如何保证消息的可靠性问题。所谓可靠性,指消息不重不漏

生产者消费者模型

  生产者-消费者模型用于描述两类进程(生产者和消费者)之间的数据交互。可以被认为是独立的服务,生产者负责生成数据,消费者负责处理这些数据。在分布式系统中,队列在其中扮演了消息(数据)传递的功能。

关于消息队列的作用,一般解读为:

解耦:生产者和消费者独立运作,无需知道对方的运行状态。

异步:并非实时,生产者不必关注消费端的消费情况。

削峰:限制流量,防止消费者过载。

消息丢失

  这其实不难理解,就像生活中下单-快递-签收的过程。这个过程和上边的生产者-消费者模型恰有异曲同工之妙。

图片

这个过程中,

  • 下单用户(生产者)

  • 快递小哥(队列)

  • 签收人(消费者)

  • 快件(消息)

如果包裹被粗略的认为是一条消息,那么快件在邮寄过程中丢失了,就是消息丢失。快件从发货到签收,我们不用去关心中间发生了什么。但是要是没收到货,那得给我个理由

如何排查?

  就上边的快件丢失问题,怎么知道快递为何没有收到?很简单,一段一段的排查:

  1. 商家是否有发货?

  2. 快递公司是否揽收?

  3. 查看快递小哥是否放入代收点

相应的,如果生产环境中突然发现诸如:告警、服务宕机、数据流转异常等问题时,我们也会在链路上(A、B、C三处)逐一排查。

产生原因及解决方案

1、生产端可靠性投递

为确保消息从生产端可靠地投递到RabbitMQ,我们需要考虑以下几个关键点:

网络故障:消息可能在传输过程中因网络问题而丢失。

RabbitMQ故障:如果RabbitMQ宕机,消息也可能丢失。

图片

对应解决方案:

  • 开启事务机制

事务在RabbitMQ中可能会影响性能,因为它们需要在所有节点上同步状态。因此,RabbitMQ尽量避免使用事务。核心代码:

private static void executeTransaction(Channel cha
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辣香牛肉面

感谢有缘之人的馈赠

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值