这些异常都建立在亲测的基础上,后续有新异常会继续补充。
1、broker 上不存在该 topic,创建该 topic 即可;注意:测试环境 topic 都是自动创建,偶尔会出现创建异常情况,使用手动创建保证创建成功;
2、broker 没有正确链接到name server上;
3、producer 没有正确连接到name server上;
1、这个异常本质就是 rpc 调用超时,rocket 的 rpc 请求都是异步的。这个异常表示发送成功后等待响应超过了最大等待时间。可能是有人发送了大消息,或者 rocket 发生了波动。可以适当的调整最大超时时间:setSendMsgTimeout
2、创建实例时,如果开启了 SSL,请开启 SSL:
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;
public class Main {
public static void main(String[] args) {
DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");
//填入连接地址
producer.setNamesrvAddr("192.168.0.1:8100");
producer.setUseTLS(true); //创建实例时,如果开启了SSL,请添加此行代码。
try {
producer.start();
Message msg = new Message("TopicTest",
"TagA",
"OrderID188",
"Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET));
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n", sendResult);
} catch (Exception e) {
e.printStackTrace();
}
producer.shutdown();
}
}
org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout
基本上是 ip 或网络的问题
可以尝试的解决方案:
1、首先来到rocketmq目录下,修改conf文件夹下broker.conf 文件当中的配置
vim conf/broker.conf
2、来到配置文件后在文件最后加上如下配置:
brokerIP1=101.200.xxx.xxx #这里的ip地址修改成自己服务器的ip地址
autoCreateTopicEnable=true
3、如果正在运行mqnamesvr还有mqbroker的话,需要先shutdown它们
#停止broker,这里是在rocketmq目录下,不是在bin目录下
sh bin/mqshutdown broker
#停止namesvr
sh bin/mqshutdown namesrv
4、重新运行mqnamesvr和mqbroker
#后台启动namesvr,这里的IP地址记得更换为自己的服务器
nohup sh bin/mqnamesrv -n "101.200.xxx.xxx:9876" &
#后台运用刚刚更改的配置文件启动mqbroker
nohup sh bin/mqbroker -n localhost:9876 -c conf/broker.conf autoCreateTopicEnable=true &
这些步骤做完之后在运行一下程序估计就不会有什么大问题了!当然以上都是建立在你的程序没有问题的基础上!