消费者如何保证消息队列消息的有序性?

​​​​​​

  • 生产端在发送消息时,除了保证消息的有序性,还要始终保证单条消息即是全量信息(也就是“将有先后顺序的几条消息组合成一条消息”统一进行发送)。
  • 只创建一个队列,生产者和消费者都只设置一个实例。
  • 如果有A类消息存在A1、A2、A3的有序性,有B类消息存在B1、B2、B3的有序性,则生产端可以使用两个队列分开发送这两类消息,消费端可以定义两个消费者分开消费这两个队列。
  • 一般业务只需要考虑局部有序即可,例如对于用户秒杀的订单数据,多个用户之间的订单不需要保证有序,只需要保证单个用户的订单数据有序即可。此时用户数量是巨大的,不可能采用上面的方法为每个用户都创建一个队列,此时可以采用下面的方式解决。
  • 对于订单场景,在发送端我们使用账户ID作为key,采用一致性哈希算法(一致性 hash 算法本质上也是一种取模算法计算出队列编号,指定队列发送消息。一致性哈希算法可以保证相同的key值总是发送到同一个队列中,这样保证相同key的消息是严格有序的,如果不考虑队列扩容,也可以用队列数量取模的简单方法来计算队列编号消费者可以定义N个消费者分开消费N个队列。
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值