rocketMq 中关于消息不丢失,重复消费,顺序消费问题

消息不丢失

Producer-----【1】—>broker----【2】—>consumer
可能会丢失数据的阶段:

  1. 生产者发送消息到broker
  2. broker收到后放在内存中,还没来得及刷磁盘挂了
  3. 消费者消费数据失败

针对不同的情况的解决方式

  1. 发送到broker失败引起丢失:** 采用同步重试发送,等待broker响应ack,发送失败可以重试几次**
  2. broker宕机引起的丢失:
    ** 可以改成同步刷盘机制(默认是异步),收到消息后先持久化到磁盘以后再返回ack消息给producer **
    ** 主从机制,等消息都同步到slave再通知producer**
  3. 消费失败引起的丢失:** 消费成功后返回ack成功通知,消费失败配置消息重试**
    .

重复消费

做好消费者接口的幂等性

  1. 比如比较重要的场景,例如跟钱相关的用强校验,直接用数据库打标记作为记录,消息是否已经被消费过
  2. 不是很重要的场景,例如发送短信、邮件通知等使用弱校验,在redis里面打个标记,设置过期时间,一段时间内不会重复消费

顺序消费

发送端
比如同一个业务多个操作具有顺序性,使用业务中共有的唯一id标志,hash以后发送到同一个队列里面去 MessageQueueSelector的实现 SelectMessageQueueByHash ,用业务id进行hash取模将多个操作发送到一个队列里面去
消费端
使用 MessageListenerOrderly进行顺序消费

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值