如何解决Windows Java应用连接Linux虚拟机Wildfly服务器的连接拒绝问题
解决Windows连接Linux虚拟机Wildfly JMS Topic的连接拒绝问题
先排查网络连通性
- 在Windows命令行执行
ping <虚拟机IP>,如果不通,先解决虚拟机和主机的网络互通问题(比如切换虚拟机为桥接模式,确保二者在同一网段)。 - 测试8080端口是否能访问:执行
telnet <虚拟机IP> 8080,要是提示无法连接,说明端口没开放,或者Wildfly没绑定到外部可访问的地址。
修改Wildfly绑定地址*(关键)*
默认Wildfly只绑定localhost,外部机器根本连不上,两种修改方式:
- 临时生效:启动Wildfly时加参数,在Linux虚拟机的Wildfly安装目录执行:
./standalone.sh -b 0.0.0.0 -bmanagement 0.0.0.00.0.0.0表示绑定所有网卡,外部就能访问了。 - 永久生效:修改配置文件
standalone/configuration/standalone-full.xml(因为启用了消息功能,默认用full配置):
找到<interfaces>节点下的<interface name="public">,把
改成<inet-address value="${jboss.bind.address:127.0.0.1}"/>
改完重启Wildfly。<inet-address value="0.0.0.0"/>
检查Linux防火墙
- 先临时关闭防火墙测试:CentOS/RHEL执行
systemctl stop firewalld,Ubuntu执行ufw disable。如果关闭后能连接,说明要开放8080端口:- CentOS/RHEL:
firewall-cmd --add-port=8080/tcp --permanent firewall-cmd --reload - Ubuntu:
ufw allow 8080/tcp
- CentOS/RHEL:
代码调整
- 把
Context.PROVIDER_URL改成虚拟机的实际IP,比如:
(如果没改端口,8080可以省略,但写全更稳妥)jndiProperties.put(Context.PROVIDER_URL, "http-remoting://192.168.x.x:8080"); - 默认Wildfly远程JMS连接需要认证,创建连接时要传入用户名密码:
要是还没创建用户,在Linux虚拟机里运行Wildfly目录下的TopicConnection con = f.createTopicConnection("你的JMS用户名", "你的JMS密码");./add-user.sh,选a) Application User,设置用户名、密码,分配guest或jms角色即可。
验证服务状态
在Windows浏览器里访问http://<虚拟机IP>:8080,能看到Wildfly欢迎页面的话,说明服务正常且外部可访问。
内容的提问来源于stack exchange,提问作者Gaurav
相关产品推荐
相关产品推荐

