为了账号安全,请及时绑定邮箱和手机立即绑定

消息队列中的消息是并行执行的,消息之间有顺序依赖怎么办?

消息队列中的消息是并行执行的,消息之间有顺序依赖怎么办?

四季花海 2019-04-16 20:27:55
之前发的贴子没说明白,重新发吧。此例只用于说明异步消息并行执行时会出现的问题。这里用评论微博来举例好了。A评论B后,会给B发异步通知,然后A删除评论时,会异步删除这个通知。问题:消息队列中有两个消息:发通知和删除通知,由于有并发(多个消费者),可能先执行的是删除通知,然后再执行发通知
查看完整描述

2 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

目前有两种方案:
方案一:当删除评论时,检查一下评论对应的消息是否存在,如果不存在,那retry(Pythoncelery支持)一次
方案二:大部分情况下,只有同一用户的异步消息会产生顺序依赖,所以按用户id做hash,保证同一用户进入同一队列,并且每个队列只有一个消费者。不过,由于每个队列只有一个消费者,随着用户量的增加,就要在broker中创建越来越多的队列,当然,我们可以使用多个broker
                            
查看完整回答
反对 回复 2019-04-16
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

假如是Kafka的多partition/RocketMQ的多messagequeue,如果要求强顺序性的,其中一个方案:可以考虑将发送的消息带上时间戳,在消费端把消息添加到一个分布式的redis有序集合,根据这个时间戳来排序取出来,就可以做到消息有序性;另一个方案是将消息放入一个partition/messagequeue,因为单个partition/messagequeue是消息有序性的
                            
查看完整回答
反对 回复 2019-04-16
  • 2 回答
  • 0 关注
  • 578 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号