事情起源於一次本地安裝和配置RabbitMQ,代碼之前是OK的,只是把RabbitMQ服務器的IP網段調整到和開發機器不同的網段后(備注,有設置兩者互通,並且防火牆也是通的);
但是當做完RabbitMQ服務器的網段后,開發機器的代碼就訪問RabbitMQ,就報錯connection error or timeout。
1. 環境介紹
RabbitMQ 服務器:192.168.13.21
開發機器:192.168.3.6
兩者網絡是聯通的,並且RabbitMQ服務器的防火牆是允許客戶端IP訪問端口5672( amqp)和15672(http web)
cmd >> ping 192.168.13.21
cmd >> telnet 192.168.13.21 5672
2. old 代碼,原有的timeout,分別設置如下
啟動程序報錯,如下:
3. new 代碼,修改的timeout,分別設置如下:同時必須增加setHandshakeTimeout參數
連接和執行成功,如下:
4.解決辦法:
最后,發現根本原因,可能是本地開發機器和RabbitMQ服務器之間,不同網段的地址或IP解析產生過多耗時。
原因:本地開發機器的網卡設置,我是通過增加一個IP="192.168.13.6",來實現本地開發機器和“RabbitMQ服務器”之間不同網段的互相通訊。
step 1: 修改RabbitMQ服務器的host文件,告訴RabbbitMQ服務器,他自己的IP和HOSTNAME
root >> vi /etc/host
# 增加如下參數
然后,重啟一下RabbitMQ
root >> systemctl restart rabbitmq-server
step 2: 重新在開發機器上,測試之前的old代碼
# 測試之前的old代碼,timeout設置還是60ms,沒有添加參數setHandshakeTimeout。
# 但是,這次連接和發送RabbitMQ成功