GitHub user pxd98 closed a discussion: RocketMQ 在broker 重启时, 
生产者显示消息发送超时,但该消息仍被mq接收

RocketMQ版本为4.9.1,生产者是同步发送,broker端为同步双写。在重启一个Broker主节点的时候发现在该节点刚重启完的时候出现了超时(sendDefaultImpl
 call timeout),生产者的超时时间设置为3s,使用mqadmin 
查询该消息显示该消息已被成功投递。怀疑是刚重启完成后生产者准备往这个节点发送消息,但发送失败,此时已经判断与该节点无法连接的用时已经超过了3s,导致直接发送超时。即使是重启从节点,也有这个问题。在刚开始时会告诉我发送状态是slave
 not found,之后会有一瞬间的长等待,然后就报了上面这个错。

日志如下:

```
2023-07-31 11:55:49,776 WARN RocketmqClient - mq retry time: 0,  cost time : 0
2023-07-31 11:55:49,776 INFO RocketmqRemoting - createChannel: begin to connect 
remote host[127.0.0.1:10784] asynchronously
2023-07-31 11:55:49,777 INFO RocketmqRemoting - NETTY CLIENT PIPELINE: CONNECT  
UNKNOWN => 127.0.0.1/172.16.0.93:10784
2023-07-31 11:55:49,777 INFO RocketmqRemoting - createChannel: connect remote 
host[127.0.0.1:10784] success, 
AbstractBootstrap$PendingRegistrationPromise@4e515669(success)
2023-07-31 11:55:52,163 WARN RocketmqClient - get Topic [TBW102] 
RouteInfoFromNameServer is not exist value
2023-07-31 11:55:52,163 WARN RocketmqClient - 
updateTopicRouteInfoFromNameServer Exception
org.apache.rocketmq.client.exception.MQClientException: CODE: 17  DESC: No 
topic route info in name server for the topic: TBW102
See http://rocketmq.apache.org/docs/faq/ for further details.
        at 
org.apache.rocketmq.client.impl.MQClientAPIImpl.getTopicRouteInfoFromNameServer(MQClientAPIImpl.java:1385)
        at 
org.apache.rocketmq.client.impl.MQClientAPIImpl.getTopicRouteInfoFromNameServer(MQClientAPIImpl.java:1355)
        at 
org.apache.rocketmq.client.impl.factory.MQClientInstance.updateTopicRouteInfoFromNameServer(MQClientInstance.java:622)
        at 
org.apache.rocketmq.client.impl.factory.MQClientInstance.updateTopicRouteInfoFromNameServer(MQClientInstance.java:509)
        at 
org.apache.rocketmq.client.impl.factory.MQClientInstance.updateTopicRouteInfoFromNameServer(MQClientInstance.java:358)
        at 
org.apache.rocketmq.client.impl.factory.MQClientInstance$3.run(MQClientInstance.java:275)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

2023-07-31 11:55:52,776 INFO RocketmqRemoting - closeChannel: begin close the 
channel[127.0.0.1:10784] Found: true
2023-07-31 11:55:52,777 INFO RocketmqRemoting - closeChannel: the 
channel[127.0.0.1:10784] was removed from channel table
2023-07-31 11:55:52,777 WARN RocketmqRemoting - invokeSync: close socket 
because of timeout, 3000ms, 127.0.0.1:10784
2023-07-31 11:55:52,777 WARN RocketmqRemoting - invokeSync: wait response 
timeout exception, the channel[127.0.0.1:10784]
2023-07-31 11:55:52,777 INFO RocketmqRemoting - NETTY CLIENT PIPELINE: CLOSE 
172.16.0.93:10784
2023-07-31 11:55:52,777 INFO RocketmqRemoting - eventCloseChannel: the 
channel[null] has been removed from the channel table before
2023-07-31 11:55:52,777 INFO RocketmqRemoting - closeChannel: close the 
connection to remote address[172.16.0.93:10784] result: true
2023-07-31 11:55:52,777 WARN RocketmqClient - sendKernelImpl exception, resend 
at once, InvokeID: 3944832610831701411, RT: 3001ms, Broker: MessageQueue 
[topic=t2, brokerName=broker-a, queueId=0]
org.apache.rocketmq.remoting.exception.RemotingTimeoutException: wait response 
on the channel <127.0.0.1/172.16.0.93:10784> timeout, 2999(ms)
        at 
org.apache.rocketmq.remoting.netty.NettyRemotingAbstract.invokeSyncImpl(NettyRemotingAbstract.java:437)
        at 
org.apache.rocketmq.remoting.netty.NettyRemotingClient.invokeSync(NettyRemotingClient.java:377)
        at 
org.apache.rocketmq.client.impl.MQClientAPIImpl.sendMessageSync(MQClientAPIImpl.java:503)
        at 
org.apache.rocketmq.client.impl.MQClientAPIImpl.sendMessage(MQClientAPIImpl.java:487)
        at 
org.apache.rocketmq.client.impl.MQClientAPIImpl.sendMessage(MQClientAPIImpl.java:431)
        at 
org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendKernelImpl(DefaultMQProducerImpl.java:882)
        at 
org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:611)
        at 
org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1403)
        at 
org.apache.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:349)
        at org.example.App.main(App.java:42)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at 
org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)

2023-07-31 11:55:52,777 WARN RocketmqClient - Message{topic='t2', flag=0, 
properties={UNIQ_KEY=7F000001536B5910E4409D0E249001BB, WAIT=true, TAGS=tagA}, 
body=[72, 101, 108, 108, 111, 44, 32, 87, 111, 114, 108, 100, 33, 32, 52, 52, 
51], transactionId='null'}
2023-07-31 11:55:52,777 WARN RocketmqClient - mq retry time: 1,  cost time : 
3001
2023-07-31 11:55:52,777 WARN RocketmqClient - mq cost time out : 3001
2023-07-31 11:55:52,777 WARN RocketmqClient - mq send not OK: 
2023-07-31 11:55:52,777 WARN RocketmqClient - MessageQueue [topic=t2, 
brokerName=broker-b, queueId=0]

```

我想问一下这个是什么原因,有否解决方案,谢谢。

GitHub link: https://github.com/apache/rocketmq/discussions/7099

----
This is an automatically sent email for dev@rocketmq.apache.org.
To unsubscribe, please send an email to: dev-unsubscr...@rocketmq.apache.org

Reply via email to