每天一个知识点- rabbitMq 如何防止消息不丢失

在这里插入图片描述

每日一题

在这里插入图片描述

rabbitMq 如何防止消息不丢失

我们使用 rabbitMq 用来传递消息的时候,至少有三个参与者,分别是 生产者、MQ、消费者
从三个参与者的角度来说都有可能出现消息丢失的情况

生产者生产消息 保证消息投递到MQ

在生产者发送到RabbitMQ Server时有可能因为网络问题导致投递失败,从而丢失数据。我们可以使用confirm模式(或者事务机制 但是影响性能)防止数据丢失和消息落库保证消息不丢失

  1. 在生产者发送消息之前,保存消息到数据库,设置状态位发送中
  2. 生产者收到MQ的确认回调时,更改数据库中消息的状态为已删除
  3. 可以开启定时任务扫描未发送成功的消息重新投递,重试一定次数后还未成功,则标记消息状态为发送失败之后人工处理

RabbitMQ Server

在rabbitMq内部出现消息丢失分为两种情况

  1. 消息找不到对应的 exchange 或者 queue
    这两种都可以使用 rabbitMq 的参数 mandatory 来解决,开启强制消息投递(mandatory为设置为true),但消息未被路由至任何一个queue,则回退一条消息到RabbitTemplate.ReturnCallback中的returnedMessage方法
  2. rabbitServer 宕机
    需要将队列和exchange持久化

消费者消费异常

打开手动消费者确认机制,手动ACK,如果消费者出现异常,消息重新入队,等待再次消费,这里可能会出现消息重复消费的情况,所以同时也要保证消息的幂等性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

1999

每人一点点,明天会更好

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

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

打赏作者

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

抵扣说明:

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

余额充值