RocketMQ一直打印RocketmqRemoting closeChannel: close the connection to remote address[] result: true


交代一下背景:

RocketMQ服務端搭建在ECS上面(問題就出在這里)

SpringBoot應用根據官網Demo(參考:https://github.com/apache/rocketmq-spring/tree/master/rocketmq-spring-boot-samples)構建

 

項目啟動的時候就開始打印遠程地址為空,發送消息失敗並且也打印遠程地址為空:

RocketmqRemoting: closeChannel: close the connection to remote address[] result: true

 

remote address是空的,開始以為是項目的rocketmq.name-server配置有問題,通過獲取RocketMQTemplate的namesrvAddr發現沒問題,代碼如下

rocketMQTemplate.getProducer().getNamesrvAddr()

 

再看一下SendCallback的Throwable,錯誤信息如下:

org.apache.rocketmq.client.exception.MQClientException: Send [1] times, still failed, cost [5325]ms, Topic: ADDRESS_PART_TOPIC, BrokersSent: [broker-a]
See http://rocketmq.apache.org/docs/faq/ for further details.
    at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:638)
    at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.access$300(DefaultMQProducerImpl.java:90)
    at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl$3.run(DefaultMQProducerImpl.java:491)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)
    at java.util.concurrent.FutureTask.run(FutureTask.java)
    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)
Caused by: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <192.168.0.4:10911> failed
    at org.apache.rocketmq.remoting.netty.NettyRemotingClient.invokeAsync(NettyRemotingClient.java:537)
    at org.apache.rocketmq.client.impl.MQClientAPIImpl.sendMessageAsync(MQClientAPIImpl.java:484)
    at org.apache.rocketmq.client.impl.MQClientAPIImpl.sendMessage(MQClientAPIImpl.java:441)
    at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendKernelImpl(DefaultMQProducerImpl.java:811)
    at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:557)
    ... 8 more

看到192.168.0.4:10911這個地址就知道問題是出在RocketMQ的Broker服務,192.168.0.4是ECS內網IP地址

這里再看一下Broker啟動信息:

 

The broker[broker-a, 192.168.0.4:10911] boot success. serializeType=JSON and name server is X.X.X.X:9876

 

確定問題是brokerIP是服務器的內網IP導致producer無法與之建立連接導致

 

解決方法:

 

//查看broker配置
sh ./bin/mqbroker -m

 

在conf/broker.conf配置文件中增加

 

brokerIP1=X.X.X.X(公網IP)

 

再次啟動broker服務

nohup sh bin/mqbroker -n 111.231.XX.XX:9876 -c conf/broker.conf autoCreateTopicEnable=true &

啟動結果:

The broker[broker-a, X.X.X.X:10911] boot success. serializeType=JSON and name server is 106.12.x.x:9876

重啟本地項目,測試producer發送消息成功


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM