Dubbo配置使用

Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。dubbo通常采用zookeeper作为注册中心,这也是官方推荐的方式

使用步骤

  1. 使用dubbo前应先启动zookeeper服务

  2. 定义服务接口: (该接口需单独打包,在服务提供方和消费方共享)

  3. 在服务提供方实现接口:(对服务消费方隐藏实现)

  4. 在服务提供方通过Spring配置声明暴露服务

  5. 在服务消费方通过Spring配置引用远程服务

  6. 最后在服务消费方就可以像调用本地方法一样调用远程服务接口

对于分布式服务来说,通常情况下服务提供者也是其它服务的消费者,反之服务消费者也会对外提供服务 这里会遇到一个dubbo循环调用的问题,在编程时应尽量避免

具体demo 代码见 https://github.com/lilixin/learning-dubbo

注意事项

服务提代者和服务消费者 暴露或引用接口时配置的 version要一致 如果有group 也要一致

demo项目基本springboot来集成dubbo 注意引入dubbo配置文件的方式 在启动类上

@ImportResource({"classpath:dubbo-consumer.xml"})

@ImportResource({"classpath:dubbo-provider.xml"})

集群容错 默认是failover 也就是重试 在发布服务或者引用服务的时候设置

负载均衡 支持随机、轮询、一致性HASH等方式

直连

直接在引用的配置url里输入提供者的服务地址即可

<dubbo:reference id="dubboService"
                     interface="top.lilixin.dubbo.DubboInterface"
                     url="dubbo://127.0.0.1:30001/top.lilixin.dubbo.DubboInterface"/>

只注册/只发布

<dubbo:registry subscribe="false" address="localhost:2181"></dubbo:registry>

通过上面的方式可以做到不订阅服务

<dubbo:registry register="false" protocol="zookeeper" address="localhost:2181" check="false"/>

通过上面的方式 可以做不注册服务

多协议机制

可以发布接口的时候配置多种协议

<dubbo:service cluster="failover" retries="2"
                   interface="top.lilixin.dubbo.DubboInterface"
                   ref="dubboService" protocol="rmi,dubbo"/>

多注册中心

<!--多注册中心-->
<dubbo:registry protocol="zookeeper" id="reg1" timeout="10000" address="localhost:2181"/>
<dubbo:registry protocol="zookeeper" id="reg2" timeout="10000" address="localhost:2182"/>
<dubbo:registry protocol="zookeeper" id="reg3" timeout="10000" address="localhost:2183"/>
<!--服务发布的配置,需要暴露的服务接口-->
<dubbo:service cluster="failover" retries="2"
    interface="top.lilixin.dubbo.DubboInterface"
    ref="dubboService" registry="reg1,reg2,reg3"/>

多版本

不同的服务是有版本不同的,版本可以更新并且升级,同时,不同的版本之间是不可以调用的

<!--服务发布的配置,需要暴露的服务接口-->
<dubbo:service cluster="failover" retries="2"
    interface="top.lilixin.dubbo.DubboInterface"
    ref="dubboService" registry="reg1" version="1.0.0"/>
<dubbo:service cluster="failover" retries="2"
   interface="top.lilixin.dubbo.DubboInterface"
   ref="dubboService" protocol="rmi" registry="reg2" version="1.1.0"/>

协议及version字段都相同的服务接口才能调用成功

Last updated

Was this helpful?