一、连接dubbo注册中心:
生产者注册到注册中心,消费者从注册中心消费;
如测试环境和开发环境共用一个注册中心,测试环境服务A已经注册到注册中心,(本地)开发环境可以不启动A,只启动应用B,调用注册中心的服务A。
以下注册中心均为zk:
二、dubbo直连本地:
即生产者和消费者均绕开注册中心,消费者直接连接生产者。如测试环境和开发环境共用一个注册中心,本地调试的时候一般采取直连的方式。即有服务A,应用B,改动了A,希望B上看到效果,则把A的dubbo配置文件中register均改为false,并且B需要消费本地的服务后加上url="dubbo://127.0.0.1:端口号",在本地分别启动A、B,就是B直连A。
当然,这种调试也可以继续采用注册中心的方式,即改动了服务A,而A继续注册到注册中心,启动A,应用B从注册中心消费A。但是这种方式也是需要启动两个组件,并且在调试还没有通过的情况下,A服务在注册中心注册了两个节点,如:(第一个为本地启动的服务,第二个为测试环境机器部署的服务)
会影响正在消费A的应用(包含B)。
三、举例:
1、通过注册中心连接:
(1)生产:provider.xml
<?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参数设置 -->
<dubbo:application name="my-service1"/>
<dubbo:provider timeout="3000" retries="0"/>
<dubbo:registry protocol="zookeeper"
address="192.168.xx.123:2181,192.168.xx.456:2181,192.168.xx.789:2181"
register="true" file="my-service1.cache" check="false"/>
<dubbo:protocol name="dubbo" port="20885"/>
<!-- 提供的服务 -->
<dubbo:service ref="userService" interface="com.wtyy.service.UserService"/>
<dubbo:service ref="roleService" interface="com.wtyy.service.RoleService"/>
<!-- 依赖的服务 -->
<dubbo:consumer timeout="3000" retries="0" check="false"/>
<dubbo:reference id="schoolService" interface="com.bb.service.SchoolService" />
<dubbo:reference id="notifyService" interface="com.aa.service.NotifyService" />
</beans>
注意这个port指注册到注册中心的端口,不是指该service部署机器的端口 。一个注册中心同一个端口不可以被不同服务组件注册。
(2)消费:consumer.xml:
<?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-3.1.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="my-webservice1" />
<dubbo:consumer timeout="3000" retries="0" check="false"/>
<dubbo:registry protocol="zookeeper"
address="192.168.xx.123:2181,192.168.xx.456:2181,192.168.xx.789:2181"
register="true" timeout="100000"/>
<!-- user -->
<dubbo:reference interface="com.wtyy.service.AreaService" id="areaService" check="false"/>
<dubbo:reference interface="com.aa.service.SchoolService" id="schoolService" check="false"/>
</beans>
注:上面的例子,provider也含有消费,因为生产和消费不是绝对的,生产者也可能消费某些第三方服务,不过一般情况下不会这样。
2、本地直连:
(1)首先,生产不注册到注册中心,即register="true"改成register="false";并在本地启动所有需要的生产服务;
如启动service1项目,有个userService注册在本地20885端口;
启动service2项目,有个schoolService注册在本地20881端口。
(2)消费,服务后加上本地的地址(注意,直连要保证同一个服务的生产和消费在同一个端口),当然,不需要本地调试的仍然可以使用注册中心的服务,如下面的foodService:
<dubbo:reference interface="com.wtyy.service.UserService" id="userService"
url="dubbo://127.0.0.1:20885"/>
<dubbo:reference interface="com.aa.service.ScoolService" id="schoolService"
url="dubbo://127.0.0.1:20881"/>
<dubbo:reference interface="com.aa.service.FoodService" id="foodService"
/>