暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

你不知道的dubbo直连模式

AKA程序王 2019-10-21
405

dubbo的直连模式


1. 应用场景

多用于测试的时候,绕开注册中心,方便排查错误。

 

2. 配置

直连模式的配置不需要对provider端做任何更改,只需要对consumer端的spring.xml做出修改即可(如下红色行),两端配置内容如下:

——provider端内容:

<!--注册中心地址,当provider启动的时候会将上面的工程名称、接口名称注册到ZK-->

<dubbo:registry id="zk2181" address="zookeeper://127.0.0.1:2181"/>

<dubbo:registry id="zk2182" address="zookeeper://127.0.0.1:2182" default="false"/>

<!--dubbo提供的服务端口,也就是说dubbo通过该端口与consumer通信-->

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

<!-- 扫包,如果是多个包用逗号隔开-->

<context:component-scan base-package="cn.crm.service,cn.crm.dao"/>

<!--对consumer一端提供的接口名称,因为上面用扫包的方式创建对象,所以

ref的值默认是实现类的第一个字母小写的名字-->

<dubbo:service interface="cn.crm.api.UserApi" ref="userService" registry="zk2181"/>

<dubbo:service interface="cn.crm.api.OrdersApi" ref="ordersService" registry="zk2181"/>

——consumer端内容:

<!--注册中心-->

<dubbo:registry id="zk2182" address="zookeeper://127.0.0.1:2182" />

<!--要引用的接口-->

<dubbo:reference id="userApi" interface="cn.crm.api.UserApi"  check="false"/>

<dubbo:reference id="ordersApi" interface="cn.crm.api.OrdersApi"  url="dubbo://127.0.0.1:20880"/>

备注:

1)provider端的所有服务都注册到了2181上,consumer端只声明2182的注册中心,然后检测是否能访问到OrdersApi服务?

2)因为这时UserApi2182中找不到,所以需要指定check="false"否则启动tomcat时报错,即使这样,在访问/getusers时也会报No provider的异常,原因同上。

3)如果需要直连多个地址,地址间用“,”号隔开。


3. 测试

上述配置完成后,通过浏览器访问http://localhost:8080/crmweb/getorders,成功。


4. 优劣分析

1)接口和接口之间的配置互不影响,A用直连不影响B用注册用心

2)可绕过注册中心实现点对点连接,但使用场景有限,常用于测试时

3)无法支持集群

4)服务的地址不再透明,需要对地址进行维护,不利于大规模服务情况


5. 作业

1)直连成功后,启动dubbo-admin查看2182注册中心是否有提供者和消费者?

没有提供者和OrdersApi消费者,但是有userApi消费者。

2)其他配置不变,删除 url="dubbo://127.0.0.1:20880"getorders是否可用?

不能,提示没有provider.

3)其他配置不变,删除 url="dubbo://127.0.0.1:20880"再加上2181的注册中心配置,getorders是否可用?如下所示:

<!--注册中心-->

<dubbo:registry id="zk2181" address="zookeeper://127.0.0.1:2181" />

<dubbo:registry id="zk2182" address="zookeeper://127.0.0.1:2182" />


<!--要引用的接口-->

<dubbo:reference id="userApi" interface="cn.crm.api.UserApi"  check="false"/>

<dubbo:reference id="ordersApi" interface="cn.crm.api.OrdersApi"  check="false"/>

答:可用,因为可通过2181的注册中心找到相应的服务。


(完结)

                                                                                                      


                        


文章转载自AKA程序王,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论