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)因为这时UserApi在2182中找不到,所以需要指定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的注册中心找到相应的服务。
(完结)







