最近因为正好用到了RocketMQ,配置了后因为网络安全原因,需要做多层转发到外网访问,并添加了acl控制,内网测试时一切正常,但是发现9876映射出去后,发现消费端消费不到数据并且无报错,因此兜兜转转花了2天多才解决
1.首先说说为什么消费不到数据,是因为只做了9876的映射,实际broker的端口有4个,9876,10911, 10912, 10909
官网解释如下
而后我把测试环境只开放9876,然后复现,消费者确实无法获取数据
通过wireshark抓包也能看见9876中返回10911的连接方式,逻辑是mq内部处理的
2.开放端口后还是获取不到数据,通过wireshark的抓包分析,发现rocketmq还是发送的内网IP,并不是公网IP,后经查询,是需要通过配置broker.conf实现
具体就是这两个属性(注意IP大写,注意IP大写,注意IP大写!!!),brokerIP1配置外网IP,brokerIP2配置内网IP
通过抓包可知,确实映射了外网IP出来
到这一步理论上应该结束了,但是通过报文可以知道,发出来的走的是10911,但是正常为了安全考虑,一般不会映射默认端口出来,所以还得改broker.conf中的listenPort(Broker 对外服务的监听端口),要与映射端口一致才可以,配置好后外网正常取数