內網環境下 Dubbo 生產者/消費者/Zookeeper 通訊正常。將 Zookeeper 和生產者部署到遠程服務器後,消費者雖能在 Dubbo-admin 看到服務,但調用失敗。
Dubbo 默認通訊端口為 20880。生產者向 Zookeeper 註冊時暴露此端口,消費者需連接此端口調用服務。遠程部署時,服務器防火牆攔截了 20880 端口,導致消費者無法建立連接。
編輯 /etc/sysconfig/iptables,添加:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 20880 -j ACCEPT
重啟防火牆:service iptables restart
在生產者配置中指定端口:
<dubbo:protocol name="dubbo" port="8889"/>
同樣需在防火牆開放 8889 端口。
<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: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"/>
開放端口後,消費者即可正常調用遠程服務。建議生產環境使用安全組/防火牆策略限制來源 IP。