阿里云安装RocketMQ,异常sendDefaultImpl call timeout
阿里云安装完成RocketMQ后,在发送消息时出现:sendDefaultImpl call timeout
环境:centos7.4 rocketmq-4.4.0
我的配置:限制内存(非必须的)、配置文件修改、增加启动脚本
(1)/mydata/rocketmq-4.4.0/bin/runserver.sh
内存限制
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
gc日志目录修改
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/mydata/rocketmq-4.4.0/logs/rmq_srv_gc.log -XX:+PrintGCDetails"
(2)/mydata/rocketmq-4.4.0/bin/runbroker.sh
内存限制
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"
gc日志目录修改
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/mydata/rocketmq-4.4.0/logs/mq_gc_%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy"
(3)/mydata/rocketmq-4.4.0/conf/broker.conf
尾部增加
brokerIP1 = 机器的外网IP(如果不需要外网访问配置内网IP即可)
namesrvAddr = 机器的外网IP(如果不需要外网访问配置内网IP即可):9876
(4)启动脚本
start-mq.sh
#!/bin/bash
export JAVA_HOME=/opt/jdk1.8
nohup /bin/sh /mydata/rocketmq-4.4.0/bin/mqnamesrv -n 机器的外网IP(如果不需要外网访问配置内网IP即可):9876 > /mydata/rocketmq-4.4.0/logs/namesrv.log 2>&1 &
nohup /bin/sh /mydata/rocketmq-4.4.0/bin/mqbroker -n 机器的外网IP(如果不需要外网访问配置内网IP即可):9876 -c /mydata/rocketmq-4.4.0/conf/broker.conf > /mydata/rocketmq-4.4.0/logs/broker.log 2>&1 &
(5)查看是否启动
jps
NamesrvStartup
BrokerStartup
我的配置都使用的是外网IP
项目启动后,连接都正常,但是发送消息时出现 sendDefaultImpl call timeout
查阅资料后:
说法1:连接时长太短,超时导致的
增加参数 rocketmq.producer.sendMessageTimeout=15000
尝试后,失败
说法2:阿里云安全组开放端口:9876,10911,10909
我这边已开启了9876和10911, 然后又开启10909
尝试后,发送成功
查了下资料,原因是
rocket除了9876其实还有两个端口
10911
1090910909是VIP通道对应的端口,在JAVA中的消费者对象或者是生产者对象中关闭VIP通道即可无需开放10909端口
使用如下方法
setVipChannelEnabled(false);
org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout · Issue #568 · apache/rocketmq · GitHubhttps://github.com/apache/rocketmq/issues/568
原来是端口问题。。。
https://github.com/apache/rocketmq/issues/568