一、前言
在SpringBoot的Dubbo多配置中心遇到了比较多的坑,所以做个总结,对遇到此问题的人,可能会有很大的帮助。
我在项目服务消费方的模块中声明了一个接口,我希望我只做一个类似网关(可以想象成这样)的服务,将获取的消息,通过接口传递到另一个微服务(服务提供方可能有多个,但是接口只有一个),这样其他服务围绕我的服务作为入口,调用服务只需要通过我的路由配置,就可以调用不同服务的相同接口的实现。
二、配置文件具体实现
提一点,通过配置文件的方式非常清楚,能够清晰地明白多注册中心的使用。
要点:
(1)register group,仅仅用来区分注册中心,如果注册中心不同,就新配置一个。
(2)service group是服务的(也用其他属性区分,比如配置文件中可以用id区分),不管注册中心的group是相同还是不同,这个必须存在。这个group是dubbo判断一个接口的依据,如果group不同,那么就是不同的接口,dubbo会生成一个新的代理。这个group必须全局唯一。
1、服务提供者配置文件
provider1.xml:
<dubbo:application name="dubbo-provider1" owner="u"/>
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" check="false"
group="provider1"/>
<dubbo:protocol name="dubbo" port="20880" host="127.0.0.1"/>
<dubbo:service interface="com.example.demo.service.DemoService" ref="providerService" protocol="dubbo"/>
<bean id="providerService" class="com.example.demo.service.impl.ProviderServiceImpl"/>
provider2.xml:
<dubbo:application name="dubbo-provider2" owner="l"/>
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" check="false"
group="provider2"/>
<dubbo:protocol name="dubbo" port="20881" host="127.0.0.1" />
<dubbo:service interface="com.example.demo.service.DemoService" ref="provider2Service" protocol="dubbo"/>
<bean id="provider2Service"class="com.example.demo.service.impl.Provider2ServiceImpl"/>
2、服务消费者配置文件
consumer.xml:
<dubbo:application name="dubbo-consumer"/>
<dubbo:registry id="p1" check="false" protocol="zookeeper" address="127.0.0.1:2181" group="provider1"/>
<dubbo:registry id="p2" check="false" protocol="zookeeper" address="127.0.0.1:2181" group="provider2"/>
<dubbo:protocol name="dubbo" port="20883" host="127.0.0.1"/>
<dubbo:reference interface="com.example.demo.service.DemoService" id="providerService" registry="p1"/>
<dubbo:reference interface="com.example.demo.service.DemoService" id="provider2Service" registry="p2"/>