【RabbitMq】本地环回地址能连RabbitMq,远程无法连接的问题之解决方案

正文稍长,心急的网友请下拉至红字处。

本人原有一台T440p,在上面安装了Windows版RabbitMq,又在SpringBoot程序里配置了队列的收发消息程序,均运转正常。

昨天购置了一台T14,把SpringBoot程序拷贝过去,在application.properties文件里将环回地址127.0.0.1修改成了T440p的ip地址192.168.0.105,启动程序,发现无法收到RabbitMq的队列中的消息。程序是这样提示我的:

Attempting to connect to: [192.168.0.105:5672]
Consumer raised exception, processing can restart if the connection factory supports it. Exception summary: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection timed out: no further information
Restarting Consumer@43fa7e0a: tags=[[]], channel=null, acknowledgeMode=AUTO local queue size=0

是连接超时Time out不是拒绝服务Refused,这还和网络大多数同类问题报错不一样。

按我平时解决问题的习惯,一搜索网络二翻书,结果网络上大多都是说guest用户不能远程连,需要换新用户,我换了问题依旧,还有建议修改config文件的,也是无效,翻书就更气人,三四本讲到SpringBoot连RabbitMq的所谓畅销书,里面的例子全都是用127.0.0.1的,没有一个用的是真实IP!也就是说我踩的坑,他们根本没碰过!他们给人写书用的例子都是环回地址,等于照官方教程单机本地玩一遍,觉得都通顺了问题不大就有胆子去写书了,可见有多敷衍!

我又试了试从T14上访问T440p上的Tomcat服务,网页都能正常运作,这下我蒙圈了。这时已到中午,于是关了电脑去办事。

下午去复查结石,回来一觉睡到十点,醒来后想:如果RabbitMQ这样的消息中间件,如果远程访问需要特殊设置的话,那网络及书籍早就把这个当秘笈传颂了,而且如果真是这样,那就是RabbitMQ的大bug,严重影响用户的上手舒适性。我自己写小软件都会考虑尽量不让用户进行复杂配置,可况RabbitMQ这样成名的大软件!

因此,可以确定的是,RabbitMq没有问题,只要新建了用户赋予了权限就能从远端访问,出问题的在Windows。

我会想到原来在Linux装MySql和Tomcat时,都要修改iptables去开放端口,Win10里应该有相应设置处,于是我找到了这个:

1.WIN+X调出系统配置菜单,选择控制面板;
2.选择网络和internet,拉到底下,选择windows 防火墙;
3.点击左侧的“高级设置”选项;
4.设置入站规则(入站规则:别人电脑访问自己电脑;出站规则:自己电脑访问别人电脑),点击“新建规则”,点选“端口”,单击 “下一步”;
5.选择相应的协议,如添加5672端口,我们选择TCP,在我写本地端口处输入5672;

然后我把端口改成了RabbitMQ的5672,

在设置完确认的那一瞬间,T14上处于轮询状态的消息消费者立即做出了响应: 

Attempting to connect to: [192.168.0.105:5672]
Created new connection: rabbitConnectionFactory#4de10b75:11/SimpleConnection@50f0c144 [delegate=amqp://heyang@192.168.0.105:5672/, localPort= 50580]

 看到Create new connection我欣喜异常,看来开放端口立竿见影了。

然后我试着在T440p上发了两条消息,远端T14监听的消费者真的收到了:

 

至此问题解决,解决的关键是到Win10的防火墙端口里开放5672的入站规则!RabbitMq里只要增加用户赋予权限(https://www.cnblogs.com/heyang78/p/15245999.html供参考,也可通过界面完成)即可。

回想当时在网络搜索时,有些文章都提到过关闭防火墙开放端口之类的话,我试了前者无效,绕一圈又回到后者上来了,看来以后在Win10上装中间件少不了要去防火墙高级设置里去开放端口,这招和Linux里的iptables一样常用!

-END-

原文地址:https://www.cnblogs.com/heyang78/p/15249503.html