RocketMQ 报错 RemotingTooMuchRequestException: sendDefaultImpl call timeout
- 异常说明
在客户端的 Producer 运行起来准备发送消息时可能会抛异常如下:
Exception in thread "main" org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout
at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:640)
at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1310)
at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1256)
at org.apache.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:339)
at com.lyh.demo.web.RocketMqProducer.main(RocketMqProducer.java:31)
14:09:23.391 [NettyClientSelector_1] INFO RocketmqRemoting - closeChannel: close the connection to remote address[] result: true
因为使用的是虚拟机,设置内存也只有1G,所以从 Windows 上开发连接 虚拟机中的 nameServer 时要经过 Linux 系统的防火墙,而防火墙一般都会有超时的机制,在网络连接长时间不传输数据时,会关闭这个 TCP 的会话,关闭后再读写,就有可能导致这个异常。
- 解决方法
因为现在主要是熟练 RocketMQ 的 API,所以直接关闭 Linux 的防火墙,实际中如果买的是如 阿里云的云主机,会正常。
# 关闭防火墙
[root@localhost ~]# systemctl stop firewalld
# 查看防火墙状态
[root@localhost ~]# systemctl status firewalld