Dubbo配置使用
Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。dubbo通常采用zookeeper作为注册中心,这也是官方推荐的方式
使用步骤
使用dubbo前应先启动zookeeper服务
定义服务接口: (该接口需单独打包,在服务提供方和消费方共享)
在服务提供方实现接口:(对服务消费方隐藏实现)
在服务提供方通过Spring配置声明暴露服务
在服务消费方通过Spring配置引用远程服务
最后在服务消费方就可以像调用本地方法一样调用远程服务接口
对于分布式服务来说,通常情况下服务提供者也是其它服务的消费者,反之服务消费者也会对外提供服务 这里会遇到一个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?