初次使用dubbo,在研發環境和測試環境測試沒有問題,然後將服務上線,上線後,Dubbo服務端啟動正常,客戶端啟動失敗,並提示
Caused by: java.lang.IllegalStateException: Failed to check the status of the service com.xxx.xxx.service.LoginService. No provider available for the service com.xxxx.xxxx.service.LoginService:3.0 from the url zookeeper://202.106.199.37:2181/com.alibaba.dubbo.registry.RegistryService?anyhost=true&application=xxx&application.version=3.0&check=false&default.timeout=5000&dubbo=2.5.3&interface=com.xxx.xxx.service.LoginService&methods=aLogin,bPassword,userLogin,modifyPasswordLogin,validate,fVersion,xLogout,userLogout,getTest,getCode,aLogin,aToken,aUser&pid=2200&revision=1.0&side=consumer×tamp=1462534379328&version=3.0 to the consumer 202.106.199.37 use dubbo version 2.5.3
排查這個問題時,發現:
1. 202.106.199.37並不是生產者,消費者服務器上設置的IP地址,一個莫名跑出來的IP地址
2. zookeeper的配置是
3. 在DubboAdmin管理控制台,發現生產者,消費者都有,就是生產者端提示沒有消費者。
4. 生產環境有VPN,測試環境也有VPN,測試環境沒有事,在生產環境卻出問題,所以排除VPN的問題。
通過搜索問題,發現很多人出現類似問題,就是Dubbo在有VPN的機器上需要綁定主機公網IP,但是公網IP是映射過來的,所以解決路徑走不通。
另外一個是說Dubbo使用了一個DNS的地址,通過修改Dubbo服務器上的DNS配置【vim /etc/resolv.conf 】把服務名稱改到DNS上去就可以了。這個我沒有做。覺得太麻煩。
最後還是覺得應該是IP綁定的事。把管理控制台中【dubbo/webapps/ROOT/WEB-INF/dubbo.properties】文件中加入【dubbo.protocol.host=192.168.0.123】,然後在Dubbo服務端spring的dubbo配置文件【
說明:我們線上目前就一台機器,所以服務端和消費者端都是同一個IP地址,如果你是服務器集群,這個僅供參考。
192.168.0.123這個IP地址是VPN給內網映射的IP地址,其他IP地址和本機的IP地址沒有試過行不行,所以需要自行測試。