rocketmq集群消费是否需要分布式锁

2020-06-17  本文已影响0人  不存在的bug

问题:


image.png
//检查是否已经有消费记录(不分是否已经消费)
boolean b = idempotentService.idempotentCheck(idempotent);
if(b){
    //消费消息
    this.handleMessage(t);
    //更新消费记录为已消费状态
    idempotentService.updateExpenseStatusToAlreadyExpense(k.getMsgId());
 }

1.每次消费的时候,某消费组中的消费队列和消费者绑定了关系(确定),那么他再次重试的时候,还是走原来的消费者吗?(不知道,得看源码)

  1. 如果走原来的,那么本地锁就可以满足,如果是投放到其他的消费者或不定,并且,重试的间距很小(一般应该是前一个确认消费或者没有消费才会投递二次吧, 这个问题是,二次重试的条件是什么?是超时时间,还是某种确认机制【消费或未消费。】),如果后一次的消费都需要前一次某种确认机制后才发,那么同一个队列的同一个消息重试并发是不存在的。如果不是某种机制,那么还是需要分布式锁。
    3.如果producer投递了不同的消息到不同的broker,或同样的broker(同一个监听者),那么这个时候会不会出现并发。即使两个消息的msgID都不一样,那么也会重复消费的。所以这种时候是需要分布锁的,或者其他什么锁。

以上所有问题都不确认,待研究完源码再定结论。

上一篇 下一篇

猜你喜欢

热点阅读