下单生成一条消息,付款生成一条消息,下单消息和付款消息都封装为同样的JSON格式,订阅Kafka同一个topic,现在要求下单和付款有顺序性。
解决方案:发送消息的时候下单消息和付款消息指定同样的partitionKey,此时Kafka经过hash运算,同一笔订单的下单消息和付款消息都在会落在同一个Partition中。此时可以满足先执行下单再执行付款。
如果消费者开启了线程池利用多线程处理,此时又可能出现先付款再消费的情况,此时可以利用Map缓存来解决问题。
获取消息,如果是下单消息,执行下单 *** 作后,执行成功后写入记录到数据库,然后会去Map缓存里查有没有对应的付款消息,有就继续执行对应的付款 *** 作。
获取消息,如果是付款消息,此时先查询数据库有没有下单执行成功的记录,有就执行付款,没有此时就会将付款消息写入Map缓存,等对应的下单消息处理完,后面再处理。
参考:
消息队列经典十连问
Kafka 顺序消费方案
使用弱引用实现细粒度锁_方片龙的博客-CSDN博客_使用弱引用实现细粒度锁
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)