dubbo基本配置

1.概述

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。主要核心部件
Remoting: 网络通信框架,实现了sync-over-async 和 request-response 消息机制.
RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能
Registry: 服务目录框架用于服务的注册和服务事件发布和订阅。
Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。
在这里插入图片描述

2.框架

在这里插入图片描述
节点角色说明:
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
调用关系说明:
0 服务容器负责启动,加载,运行服务提供者。

  1. 服务提供者在启动时,向注册中心注册自己提供的服务。
  2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

3.基本配置

<dubbo:service/> 服务配置,用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心。
eg、<dubbo:service ref="demoServiceImply" interface="com.unj.dubbotest.provider.DemoService" />
说明:interface是服务接口的绝对路径;ref服务接口实现类名(首字母小写)

<dubbo:reference/> 引用服务配置,用于创建一个远程服务代理,一个引用可以指向多个注册中心。
eg、<dubbo:reference id="demoService" interface="com.unj.dubbotest.provider.DemoService" />
说明:id是要调用的接口(DemoService)的名字(首字母小写);interface是接口的绝对路径;

<dubbo:protocol/> 协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。
说明:如果需要支持多协议,可以声明多个<dubbo:protocol/>标签,并在<dubbo:service/>中通过protocol属性指定使用的协议。
eg、<dubbo:protocol name="dubbo" port="20880" />

<dubbo:application/> 应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。
用于注册中心计算应用间依赖关系。
eg、<dubbo:application name="xixi_provider" />
    <dubbo:application name="hehe_consumer" />

<dubbo:module/> 模块配置,用于配置当前模块信息,可选。
<dubbo:registry/> 注册中心配置,用于配置连接注册中心相关信息。
eg、<dubbo:registry address="zookeeper://192.168.2.249:2181" />

<dubbo:monitor/> 监控中心配置,用于配置连接监控中心相关信息,可选。

<dubbo:provider/> 提供方的缺省值,当ProtocolConfig和ServiceConfig某属性没有配置时,采用此缺省值,可选。
说明:该标签为<dubbo:service><dubbo:protocol>标签的缺省值配置。

<dubbo:consumer/> 消费方缺省配置,当ReferenceConfig某属性没有配置时,采用此缺省值,可选。
说明:该标签为<dubbo:reference/>标签的缺省值设置。


<dubbo:method/> 方法配置,用于ServiceConfig和ReferenceConfig指定方法级的配置信息。
说明:该标签为<dubbo:service/><dubbo:reference/>的子标签,用于控制到方法级。
<dubbo:argument/> 用于指定方法参数配置。
说明:该标签为<dubbo:method/>的子标签,用于方法参数的特征描述。

4.配置优先级

在这里插入图片描述
上图以timeout为例,显示了配置的查找顺序,其他retries,loadbalance,actives等类似。

  • 方法级优先,接口级次之,全局配置再次之。
  • 如果级别一样,则消费方优先,提供方次之。

5.group和version

interface、group、version是服务匹配条件,三者决定是不是同一个服务。

5.1dubbo里的group

dubbo有两个地方可以配置group,
<dubbo:registry group=“testgroup1” …
这里的group代表你的逻辑分组,对应到zk上就是zk的一个节点,consumer在调用provider时就是通过这个节点找到所有活着的服务的。

<dubbo:service group="a" interface="com.qunar.pay.OrderService" ref="aOrderService" />

<dubbo:service group="b" interface="com.qunar.pay.OrderService" ref="bOrderService" />

这里也可以配置group,它是用来标识一个服务接口有多个实现的情况。
而consumer进行调用的时候也是一样,<dubbo:reference上也有一个group,这个group就是对应这service上的group的,而不是registry上的group。

5.2version

当一个接口的实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用;

6.dubbo启动检查

Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check=true。
如果你的Spring容器是懒加载的,或者通过API编程延迟引用服务,请关闭check,否则服务临时不可用时,会抛出异常,拿到null引用,如果check=false,总是会返回引用,当服务恢复时,能自动连上。
可以通过check="false"关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动

关闭某个服务的启动时检查:(没有提供者时报错)
<dubbo:reference interface="com.foo.BarService" check="false" />

关闭所有服务的启动时检查:(没有提供者时报错)
<dubbo:consumer check="false" />

关闭注册中心启动时检查:(注册订阅失败时报错);前面两个都是指订阅成功,但提供者列表是否为空是否报错,如果注册订阅失败时,也允许启动,需使用此选项,将在后台定时重试。
<dubbo:registry check="false" />
     引用缺省是延迟初始化的,只有引用被注入到其他Bean,或被getBean()获取,才会初始化。
      如果需要饥饿加载,即没有人引用也立即生成动态代理,可以配置:

<dubbo:reference interface=“com.unj.dubbotest.provider.DemoService” init=“true” />

7.配置dubbo缓存文件

配置方法如下:

<dubbo:registryfile=”${user.home}/output/dubbo.cache” />

注意:
文件的路径,应用可以根据需要调整,保证这个文件不会在发布过程中被清除。如果有多个应用进程注意不要使用同一个文件,避免内容被覆盖。
这个文件会缓存:
注册中心的列表
服务提供者列表
有了这项配置后,当应用重启过程中,Dubbo注册中心不可用时则应用会从这个缓存文件读取服务提供者列表的信息,进一步保证应用可靠性。

猜你喜欢

转载自blog.csdn.net/wenmin_111/article/details/113121768