dubbo注冊zookepper服務IP混亂


問題描述:
zookepper服務是起在開發服務器192.168.23.180上。本機起應用服務提供者注冊到192.168.23.180上的dubbo服務可以注冊成功,用dubbo-admin看也是本機的IP:10.1.24.20。本機起的客戶端程序也可以正常調用。但是服務提供者發布到192.168.23.180服務器上去就不行了。發布到服務器上注冊的服務地址就變成了124.232.132.94:20883,這個地址消費者根本就找不到,所以老是報連接超時。按道理來說應該是192.168.23.180是服務提供者的地址才對。開始以為是代碼里寫了一個124.232.132.94這樣的地址,搜了一遍沒有找到。搜了一遍服務器的配置也沒有這樣一個地址。這個地址不知道是從哪里來的。應為服務提供者和zookepper在一台機器上,將服務提供者的注冊地址改成127.0.0.1,發現還是一樣的注冊上去后就變成了124.232.132.94。於是懷疑是不是服務器上做了地址轉發什么的。
上網找了一些資料發現原來是由於服務器上配了DNS的問題。
經過測試解決辦法有以下幾個:
1、去掉服務器上的DNS配置
找到服務器上的/etc/resolv.conf 將DNS配置去掉或配置成8.8.8.8或配成192.168.23.180這樣這台服務器的DNS不可用。
參考配置如下
#nameserver 222.246.129.80
#nameserver 59.51.78.210
#nameserver 8.8.8.8
nameserver 192.168.23.180
#search localdomain
服務啟動的時候會報一個"未知的名稱或服務"的錯誤,但是不要緊,服務可以正常啟動。也可以正常注冊到zookepper,注冊的地址也是真實的服務器地址。客戶端可以正常訪問。
2、在工程duboo注冊服務配置文件里指定IP
把管理控制台中dubbo/webapps/ROOT/WEB-INF/dubbo.properties文件中加入dubbo.protocol.host=192.168.23.180,然后在Dubbo服務的dubbo配置文件<dubbo:protocol name="dubbo" port="20883"  />中加入 host="192.168.23.180",在Dubbo消費者端加入<dubbo:protocol host="192.168.0.123" />的配置。然后重啟Dubbo管理員控制台、停止消費者端,停止服務提供端,啟動服務提供端,再啟動消費者端。
參考配置如下:
服務提供者provider.xml
<!-- 用dubbo協議在20880端口暴露服務 -->
<dubbo:protocol name="dubbo" host="192.168.23.180" port="20883" />
消費者consumer.xml
<dubbo:protocol host="192.168.23.180" />
配置完了后在dubbo-admin控制台可以看到服務提供者注冊到zookepper上的dobbo服務已經是正常的192.168.23.180。消費者顯示的還是consumer://124.232.132.94/***** 但不影響調用。
3、在服務器上/etc/hosts,上配置主機名和注冊服務的IP。如:192.168.23.180 host2
沒有配置之前ping 主機名host2 返回的是124.232.132.94
ping host2
PING host2 (124.232.132.94) 56(84) bytes of data.
64 bytes from 124.232.132.94: icmp_seq=1 ttl=55 time=5.67 ms
在/etc/hosts里配置IP和主機名192.168.23.180 host2 后ping主機名host2返回 192.168.23.180
ping host2
PING host2 (192.168.23.180) 56(84) bytes of data.
64 bytes from host2 (192.168.23.180): icmp_seq=1 ttl=64 time=0.024 ms
配置完后,服務注冊IP地址正常,消費者可以正常訪問。
以上三種方式都可以解決問題,但是第3種方式更加直接方便,更好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM