溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Dubbo無法訪問遠(yuǎn)程Zookeeper已注冊服務(wù)的問題解決方案

發(fā)布時間:2020-09-30 01:47:01 來源:腳本之家 閱讀:312 作者:MonroeCode 欄目:編程語言

背景

使用Dubbo的時候發(fā)現(xiàn)當(dāng)Zookeeper、Dubbo-admin、生產(chǎn)者和消費者都在內(nèi)網(wǎng)中的時候,生產(chǎn)者的生產(chǎn)和消費是沒有問題的,但是當(dāng)它Zookeeper、生產(chǎn)者放到遠(yuǎn)程服務(wù)器上,然后消費者在訪問消費就出現(xiàn)了無法找到找到服務(wù)的問題。

內(nèi)網(wǎng)環(huán)境使用情況

Dubbo無法訪問遠(yuǎn)程Zookeeper已注冊服務(wù)的問題解決方案

上述的圖是在同一個內(nèi)網(wǎng)中,使用的代碼如下:

1、生產(chǎn)者配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://code.alibabatech.com/schema/dubbo
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  <dubbo:application name="Jhd_Security" owner="allen.xu" organization="MyJhd"/>
  <dubbo:registry address="zookeeper://172.16.61.101:2181" timeout="500000" group="JhdGroup" id="myjhd_id"/>
  <!-- 暴露出去的接口-->
  <bean id="dubboDemoFacade" class="com.dubbo.demo.facade.impl.DubboDemoFacade"/>
  <dubbo:service
      ref="dubboDemoFacade"
      interface="com.dubbo.demo.facade.IDubboDemoFacade"
      version="1.0.0"
      cluster="failfast"
      executes="10"
      timeout="500000"
      registry="myjhd_id">
  </dubbo:service>
</beans>

2、消費者配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://code.alibabatech.com/schema/dubbo
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  <dubbo:application name="consumer-of-sayHello-app" owner="allen.xu" organization="MyJhd"/>
  <dubbo:registry address="zookeeper://172.16.61.101:2181" timeout="500000" group="JhdGroup" id="myjhd_id"/>
  <dubbo:reference id="dubboDemoFacade"
           interface="com.dubbo.demo.facade.IDubboDemoFacade"
           version="1.0.0"
           cluster="failfast"
           timeout="500000"
           registry="myjhd_id"/>
</beans>

3、演示效果

Dubbo無法訪問遠(yuǎn)程Zookeeper已注冊服務(wù)的問題解決方案

Dubbo無法訪問遠(yuǎn)程Zookeeper已注冊服務(wù)的問題解決方案

可以看到生產(chǎn)者和消費者的ip是一樣的,既是在本地上是可以運行的。

多網(wǎng)環(huán)境使用情況

Dubbo無法訪問遠(yuǎn)程Zookeeper已注冊服務(wù)的問題解決方案

如果根據(jù)相關(guān)的Zookeeper修改上述中的IP地址,其他不用修改的情況下,使用上邊的代碼,則會出現(xiàn)生產(chǎn)者可以注冊到注冊中心,但是消費者無法消費到該服務(wù)。

在Dubbo-admin上可以看到生產(chǎn)者信息,但是消費者確無法使用該服務(wù),這是因為防火墻的問題。

Dubbo無法訪問遠(yuǎn)程Zookeeper已注冊服務(wù)的問題解決方案

可以看到上邊的端口是20880,這是dubbo默認(rèn)的,消費者在消費該服務(wù)的時候也會通過該端口去使用服務(wù),因此修改防火墻名單。

在 /etc/sysconfig/iptables中添加下邊內(nèi)容:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 20880 -j ACCEPT

表示開啟20880端口

Dubbo無法訪問遠(yuǎn)程Zookeeper已注冊服務(wù)的問題解決方案

然后:service iptables restart 重啟防火墻即可。

另外的一種方式是:我們可以指定生產(chǎn)者消費者的端口,可以通過

<dubbo:protocol name="dubbo" port="8889"/>

這樣的話,同樣開啟8889端口即可。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對億速云的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI