apache / rocketmq-mqtt

Apache rocketmq
https://rocketmq.apache.org/
Apache License 2.0
181 stars 63 forks source link

项目升级rocketmq-client 5.1.4版本后,org.apache.rocketmq.mqtt.ds.store.LmqQueueStoreManager#maxOffset 方法,报throw new MQClientException("The broker[" + queue.getBrokerName() + "] not exist", null); #228

Open lzkisok opened 10 months ago

lzkisok commented 10 months ago

原因如下: image 如上图,获取不到brokerAddr,导致报The broker[" + queue.getBrokerName() + "] not exist 更近一步的原因是: image

image 如上图,DefaultMQPullConsumer,没有topic,不会调用this.updateTopicRouteInfoFromNameServer(topic);导致this.brokerAddrTable为空,获取失败

this.updateTopicRouteInfoFromNameServer() 方法在rocketmq-client 4.9.3版本中的写法如下图: image 可以正常调用。

lzkisok commented 10 months ago

image 请问目前我的解决办法是否够优雅?

DongyuanPan commented 10 months ago

下面这个逻辑也没走到吗? image

lzkisok commented 10 months ago

image 如上图,在执行quene.toFirstTopic时,返回的topic是p2p和retry,所以上面的逻辑走到了,但是还是拿不到brokerAddr @DongyuanPan

DongyuanPan commented 10 months ago

image 请问目前我的解决办法是否够优雅?

不建议这么修改,可以修改下面的代码取到正确的topic: quene.toFirstTopic时,判断一下是p2p和retry吗?如果是的话,就返回对应参数设置的p2p和retry的topic(这两个topic在配置里面要求提前在broker创建了)。

不过如果broker集群没有扩缩容,这个报错应该只会第一次出现一次吧,后续有别的topic(一级topic)会更新相应的broker地址。