前端時間做新項目的時候遇到一個dubbo的一個問題,在我們項目搭建好后使用了其他同事的支付服務,支付服務架構的方式使用了dubbo服務的方式,使用zookeeper作為注冊中心,我們新項目使用dubbo注解的方式引用dubbo服務,然后項目啟動的時候發生了我們最不願意看到的一件事,項目跑不起來了。查看了一下服務,確認服務沒有掛,並且在dubbo的管理工具上也找到了這個服務,回到程序報錯去看(測試服務器還在使用,就沒還原報錯信息),發現了一個沒見過的IP,很明顯是一個內網IP。支付服務跟注冊中心都是在一台服務器,而服務的消費者是我的本機,所以內網IP是不能找到支付服務的。也就是說Zookeeper將Dubbo服務生產者的內網地址給了消費者,如果想使用支付服務將消費者放到同一台服務器上就可以找到了,但是這不是解決問題的根本方法,為什么會出現上面的情況,查看了hosts文件發現,是由於在服務器hosts配置的文件將主機名指向了內網IP地址
如此zookeeper才會將內網IP提供給消費者,我們只需要加一個公網IP即可解決問題
hosts文件修改后就能生效,然后重啟zookeeper,重啟dubbo服務,然后發現可以找到服務了(這里我馬賽克了一下,大家也都能看懂,前面就是公網IP然后空格主機名稱然后空格主及名稱)
遇到dubbo找不到的問題的時候應該先確認所有提供者與注冊中心是否正常,所有配置是不是正確,注冊中心地址是不是一樣的,檢查防火牆是不是關閉,如果在還是沒有找到提供者就可以看一下是不是內網IP的原因,這個其實也很好找,只要看控制台的打印就能知道消費者是去那個IP地址找消費者了。文章最后再提一下,有時候hosts修改可能不生效,可以重啟一下。
如何查看自己是否修改成功 uname -a
我打碼的名字跟你配置的名字一樣的時候就成功了,如果不成功重啟一下網絡就可以了
service network restart 當看到ok就重啟成功了