好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

背景

使用dubbo的时候发现当zookeeper、dubbo-admin、生产者和消费者都在内网中的时候,生产者的生产和消费是没有问题的,但是当它zookeeper、生产者放到远程 服务 器上,然后消费者在访问消费就出现了无法找到找到服务的问题。

内网环境使用情况

上述的图是在同一个内网中,使用的代码如下:

1、生产者配置

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<?xml version= "1.0" encoding= "utf-8" ?>

<beans xmlns= "http://HdhCmsTestspringframework.org/schema/beans"

     xmlns:xsi= "http://HdhCmsTestw3.org/2001/xmlschema-instance" xmlns:dubbo= "http://code.alibabatech测试数据/schema/dubbo"

     xsi:schemalocation="http: //HdhCmsTestspringframework.org/schema/beans

     http: //HdhCmsTestspringframework.org/schema/beans/spring-beans.xsd

     http: //code.alibabatech测试数据/schema/dubbo

     http: //code.alibabatech测试数据/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、消费者配置

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<?xml version= "1.0" encoding= "utf-8" ?>

<beans xmlns= "http://HdhCmsTestspringframework.org/schema/beans"

     xmlns:xsi= "http://HdhCmsTestw3.org/2001/xmlschema-instance"

     xmlns:dubbo= "http://code.alibabatech测试数据/schema/dubbo"

     xsi:schemalocation="http: //HdhCmsTestspringframework.org/schema/beans

     http: //HdhCmsTestspringframework.org/schema/beans/spring-beans.xsd

     http: //code.alibabatech测试数据/schema/dubbo

     http: //code.alibabatech测试数据/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、演示效果

可以看到生产者和消费者的ip是一样的,既是在本地上是可以运行的。

多网环境使用情况

如果根据相关的zookeeper修改上述中的ip地址,其他不用修改的情况下,使用上边的代码,则会出现生产者可以注册到注册中心,但是消费者无法消费到该服务。

在dubbo-admin上可以看到生产者信息,但是消费者确无法使用该服务,这是因为防火墙的问题。

可以看到上边的端口是20880,这是dubbo默认的,消费者在消费该服务的时候也会通过该端口去使用服务,因此修改防火墙名单。

在 /etc/sysconfig/iptables中添加下边内容:

-a input -m state --state new -m tcp -p tcp --dport 20880 -j accept

表示开启20880端口

然后: service iptables restart 重启防火墙即可。

另外的一种方式是:我们可以指定生产者消费者的端口,可以通过

?

1

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

这样的话,同样开启8889端口即可。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接

原文链接:https://cloud.tencent测试数据/developer/article/1017360

查看更多关于Dubbo无法访问远程Zookeeper已注册服务的问题解决方案的详细内容...

  阅读:27次