消息队列—Kafka的顺序消费

背景:

下单生成一条消息,付款生成一条消息,下单消息和付款消息都封装为同样的JSON格式,订阅Kafka同一个topic,现在要求下单和付款有顺序性。

解决方案:

发送消息的时候下单消息和付款消息指定同样的partitionKey,此时Kafka经过hash运算,同一笔订单的下单消息和付款消息都在会落在同一个Partition中。此时可以满足先执行下单再执行付款。

如果消费者开启了线程池利用多线程处理,此时又可能出现先付款再消费的情况,此时可以利用Map缓存来解决问题。

获取消息,如果是下单消息,执行下单操作后,执行成功后写入记录到数据库,然后会去Map缓存里查有没有对应的付款消息,有就继续执行对应的付款操作。

获取消息,如果是付款消息,此时先查询数据库有没有下单执行成功的记录,有就执行付款,没有此时就会将付款消息写入Map缓存,等对应的下单消息处理完,后面再处理。

参考:

消息队列经典十连问

Kafka 顺序消费方案

使用弱引用实现细粒度锁_方片龙的博客-CSDN博客_使用弱引用实现细粒度锁

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值