评论

收藏

[Java] Dubbo无法访问远程Zookeeper已注册服务的问题解决方案

编程语言 编程语言 发布于:2021-09-17 22:53 | 阅读数:520 | 评论:0

今天小编就为大家分享一篇关于Dubbo无法访问远程Zookeeper已注册服务的问题解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
背景
使用dubbo的时候发现当zookeeper、dubbo-admin、生产者和消费者都在内网中的时候,生产者的生产和消费是没有问题的,但是当它zookeeper、生产者放到远程服务器上,然后消费者在访问消费就出现了无法找到找到服务的问题。
内网环境使用情况
DSC0000.png

上述的图是在同一个内网中,使用的代码如下:
1、生产者配置
<?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、演示效果
DSC0001.jpg

DSC0002.jpg

可以看到生产者和消费者的ip是一样的,既是在本地上是可以运行的。
多网环境使用情况
DSC0003.jpg

如果根据相关的zookeeper修改上述中的ip地址,其他不用修改的情况下,使用上边的代码,则会出现生产者可以注册到注册中心,但是消费者无法消费到该服务。
在dubbo-admin上可以看到生产者信息,但是消费者确无法使用该服务,这是因为防火墙的问题。
DSC0004.jpg

可以看到上边的端口是20880,这是dubbo默认的,消费者在消费该服务的时候也会通过该端口去使用服务,因此修改防火墙名单。
在 /etc/sysconfig/iptables中添加下边内容:
-a input -m state --state new -m tcp -p tcp --dport 20880 -j accept
表示开启20880端口
DSC0005.jpg

然后:service iptables restart 重启防火墙即可。
另外的一种方式是:我们可以指定生产者消费者的端口,可以通过
<dubbo:protocol name="dubbo" port="8889"/>
这样的话,同样开启8889端口即可。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对CodeAE代码之家的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://cloud.tencent.com/developer/article/1017360

关注下面的标签,发现更多相似文章