阿里云安装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
10909

10909是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

原来是端口问题。。。