SpringBoot通过FailoverTransport连接远程ActiveMQ重试失败求助
我来帮你拆解下这个问题:浏览器能正常访问ActiveMQ控制台,但Spring Boot应用连不上,日志显示连tcp:// http://199.247.18.11:61616失败,大概率是这几个问题:
连接地址格式完全错误
你日志里的地址混了两种协议:tcp://后面居然加了http://,这绝对是无效的ActiveMQ TCP连接地址!浏览器访问的是ActiveMQ的Web控制台(默认用8161端口,HTTP协议),但Spring Boot连接Broker用的是TCP协议,正确的地址应该是tcp://199.247.18.11:61616,赶紧检查你的Spring Boot配置文件(比如application.properties或application.yml)里的spring.activemq.broker-url是不是写错了,别把HTTP控制台的地址混到TCP连接里。61616端口未开放防火墙/安全组
浏览器能访问8161端口不代表61616端口也对外开放了。Unix虚拟机的防火墙(比如firewalld、iptables)或者云服务商的安全组,可能只放行了8161端口(控制台用),但没给61616端口(Broker的TCP连接端口)开权限。
可以先在你的笔记本上用命令测试端口是否可达:telnet 199.247.18.11 61616 # 或者用nc命令 nc -zv 199.247.18.11 61616如果连不上,就去虚拟机里开放61616端口,比如用firewalld的话:
sudo firewall-cmd --add-port=61616/tcp --permanent sudo firewall-cmd --reloadActiveMQ Broker绑定了localhost
检查Unix虚拟机上的ActiveMQ配置文件(conf/activemq.xml),看看transportConnector的配置是不是只绑定了localhost:<!-- 错误的配置,只能本地连接 --> <transportConnector name="tcp" uri="tcp://localhost:61616"/>要改成绑定所有网卡,允许远程连接:
<!-- 正确的配置,允许所有IP访问 --> <transportConnector name="tcp" uri="tcp://0.0.0.0:61616"/>修改后记得重启ActiveMQ服务。
网络路由或代理问题
虽然概率较低,但有可能浏览器走了代理能访问8161,但Spring Boot应用没走代理导致连不上61616。可以试试关闭笔记本的代理,或者给Spring Boot配置对应的代理参数,再测试连接。
内容的提问来源于stack exchange,提问作者Kotaiba Watted

