最近因为正好用到了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 对外服务的监听端口),要与映射端口一致才可以,配置好后外网正常取数

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐