既保证异步消费 ,又保证顺序消费的mq消费方案

回顾之前的处理方案

生产环境RocketMQ 顺序问题中有介绍,之前在线上环境遇到的关于RocketMQ 顺序的问题;
也有说到处理方案 保证 生产者-消息队列-消费者 都是一对一的关系

  • 上游应用:保证生产者生产消息的顺序(由原来的并发生产改为了串行生产);
  • 下游应用:也为了保证顺序消费,由并行模式改为串型模式;
  • 消息队列:将消息(需要保证顺序的消息)放在同一个队列中进行传输;

为什么需要新的处理方案?

因为之前的方案,不管是在生产者还是消费者,都必须使用同步的方式,并且需要保证有序的消息,必须是在同一个队列中进行传输;这也意味着牺牲了很大部分异步的性能优势

新方案是:

让生产者指定消息的顺序,例如 1、2、3 ;
消费者如果收到 2号消息,会判断1号消息消费了没有,如果没有就先落库等待;
如果已经1号消息已经被消费了,则直接消费2号消息,并记录2号为已消费状态;
还需要查询数据库是否还有3号消息,如果已经收到3号消息;则继续消费3号消息;
顺序消息.png
新方案虽然保证了消费者异步消费且消息不在同一个队列中,依然能做到有序;但是还是需要生产者同步的生产消息,因为生产消息时依然需要指定消息

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值