[问题记录]-技术学习-RocketMQ-全球集群部署问题
一:问题场景
公司在部署全球的RocketMQ的时候,遇到亚洲区的服务器往欧洲区的RocketMQ发送消息失败的情况。
总共有出现两个问题
1:No Topic Route Info
org.apache.rocketmq.client.exception.MQClientException: No route info for this topic, Producer_Test For more information, please visit the url, http://rocketmq.apache.org/docs/faq/ at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendSelectImpl(DefaultMQProducerImpl.java:920) at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:891) at org.apache.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:409)
2:connect to <xxx.xxx.xxx.xxx:10911> failed
org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <xxx.xxx.xxx.xxx:10911> failed at org.apache.rocketmq.remoting.netty.NettyRemotingClient.invokeSync(NettyRemotingClient.java:388) at org.apache.rocketmq.client.impl.MQClientAPIImpl.sendMessageSync(MQClientAPIImpl.java:351) at org.apache.rocketmq.client.impl.MQClientAPIImpl.sendMessage(MQClientAPIImpl.java:335) at org.apache.rocketmq.client.impl.MQClientAPIImpl.sendMessage(MQClientAPIImpl.java:298) at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendKernelImpl(DefaultMQProducerImpl.java:696) at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendSelectImpl(DefaultMQProducerImpl.java:914) at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:891)
三:解决思路
1:问题一通过查看注册上的nameSrvAddr发现配置的host没有注册在/etc/hosts下面。导致无法解析地址,运维直接把地址改成IP后解决。
但理论上在/etc/hosts中配置上相应的hosts信息也是可以的。
2:问题2是报 brokerIP:brokerPort 连接不上。那么说明broker已经通过nameSrv成功寻址到了,只是寻址到的broker无法正常连接。
通过查看启动配置文件和broker的日志发现,注册的brokerIP是集群内网地址。那么问题就变成了服务器之间的通信问题了。
然后想到全球之间的IDC之间应该是没有互相通信的。问了一下运维,确实如此。亚洲区的集群和欧洲区的集群之间是没有通信的。
因此把broker配置文件里面的brokerIP改成 外网地址,重启一下,测试成功。