异常信息:
org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout
开发环境描述:
rocketMq 版本是 4.9.0,部署在服务器主机上, Broker 部署为单节点(单机)模式,本地需要挂载VPN,和主机进行通信。
NameServer 和 broker 的启动都是默认的启动命令。
已安装 RocketMQ Dashboard 进行管理,页面确实比较方便。
排查过程:
SpringBoot 整合 RocketMq 一个demo程序,进行简单的生产和消费。
搭建了本地 RocketMq 以及 RocketMQ Dashboard,测试正常。
但是只要配置服务器的 NameServer 地址,就抛出上面的异常,查看broker日志并没有相关的日志,推断是网络通讯有问题,也就是客户端和 broker 就没有建立正常的连接。
通过 RocketMQ Dashboard 查看 Cluster 信息,发现 broker 的地址根本就不是服务器主机的地址,网络也是不通的(telnet 测试),基本上就确定了问题所在。
错误原因解析:
NameServer 是 RocketMQ 中的另一个关键组件,用于管理 Broker 的地址信息。
Broker 是 RocketMQ 中负责存储和传递消息的组件,而 Producer 和 Consumer 分别是生产和消费消息的客户端。
简单的说 NameServer 是一个注册中心,Producer 和 Consumer 不直接与 Broker 通信,而是通过 NameServer 发现 Broker 的地址。
在一些云服务提供商的环境中,Broker 地址可能会被动态分配,而不需要手动配置。这通常是通过云服务平台的服务发现机制实现的。
也就是说如果没有配置 Broker,那么 IP:PORT 就由主机进行分配。
所以呢,需要手动配置 Broker,指定 IP:PORT ,然后重启 Broker 就可以测试了。
解决和测试:
Broker的配置文件在:/your_rocktMq_install_path/conf/broker.conf
。
手动配置broker的地址和端口:
#手动分配地址
brokerIP1= your_ip
listenPort=10911
重启 Broker
cd /your_rocktMq_install_path/
# 停止broker
sh bin/mqshutdown broker
# 启动broker
nohup sh bin/mqbroker -n [your_namesever_url]:[port] -c /your_rocktMq_install_path/conf/broker.conf &
通过 RocketMQ Dashboard 查看 broker 的地址信息,应该已经是你配置的ip和端口了,进行测试,基本上就ok了。
综述: 就是一个网络通信问题,当然了,可能也有其他的原因。