背景说明
场景一、 部署RocketMQ集群时,启动Broker报错:
org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <192.168.xxx.xxx:30909> failed
场景二、一台服务器部署RocketMQ集群,Broker的监听端口配置连续时,启动其中一个Broker报错:
问题说明
场景一问题原因是:防火墙开启,端口未开放
场景二问题原因是:端口冲突,重复占用
由此引发的思考:
1)我们看到的配置只有listenPort这一个配置参数,为什么Broker启动后,却要占用2+呢?
2)我们做防火墙端口策略开放,需要开放哪几个端口呢?
端口说明
NameServer中的端口
namesrv仅使用了一个9876端口。
如果想修改默认端口,可以参考文章:修改RocketMQ的NameServer端口
RocketMQ-Console中的端口
rocketmq-console作为RocketMQ管理平台,也仅占用1个端口,修改方式有两种:
1)启动时,通过命令行参数server.port指定:
java -jar rocketmq-console-ng-2.0.0.jar --server.port=8080 --rocketmq.config.namesrvAddr=127.0.0.1:9876
2)下载RocketMQ-Externals源码,修改yaml文件中的server.port参数,再行打包即可:
cd rocketmq-console
vim src/main/resources/application.properties
# 修改访问端口
server.port=8080
打包,启动即可:
mvn clean package -Dmaven.test.skip=true
java -jar rocketmq-console-ng-2.0.0.jar --rocketmq.config.namesrvAddr=127.0.0.1:9876
RocketMQ-Broker中的端口
listenPort
listenPort参数是broker的监听端口号,是remotingServer服务组件使用,作为对Producer和Consumer提供服务的端口号,默认为10911,可以通过配置文件修改。
打开broker-x.conf,修改或增加listenPort参数:
#Broker 对外服务的监听端口
listenPort=10911
fastListenPort
fastListenPort参数是fastRemotingServer服务组件使用,默认为listenPort - 2,可以通过配置文件修改。
打开broker-x.conf,修改或增加fastListenPort参数:
#主要用于slave同步master
fastListenPort=10909
haListenPort
haListenPort参数是HAService服务组件使用,用于Broker的主从同步,默认为listenPort - 1,可以通过配置文件修改。
打开broker-x.conf,修改或增加haListenPort参数:
#haService中使用
haListenPort=10912
其他
remotingServer和fastRemotingServer的区别:
Broker端: remotingServer可以处理客户端所有请求,如:生产者发送消息的请求,消费者拉取消息的请求。fastRemotingServer功能基本与remotingServer相同,唯一不同的是不可以处理消费者拉取消息的请求。Broker在向NameServer注册时,只会上报remotingServer监听的listenPort端口。
客户端: 默认情况下,生产者发送消息是请求fastRemotingServer,我们也可以通过配置让其请求remotingServer;消费者拉取消息只能请求remotingServer。