dubbo配置优先级
dubbo的配置可以配置在不同位置上,但是同时只能生效一个。
主要三个位置的配置:JVM配置
->配置文件
->外部配置
而之前所说的注解形式和xml配置形式和API配置都是属于配置文件配置。优先级的图示如下:
重写与优先级
优先级从高到低:
- JVM -D 参数:当你部署或者启动应用时,它可以轻易地重写配置,比如,改变 dubbo 协议端口;
- XML:XML 中的当前配置会重写 dubbo.properties 中的;
- Properties:默认配置,仅仅作用于以上两者没有配置时。
- 如果在 classpath 下有超过一个 dubbo.properties 文件,比如,两个 jar 包都各自包含了 dubbo.properties,dubbo 将随机选择一个加载,并且打印错误日志。
- 如果
id
没有在protocol
中配置,将使用name
作为默认属性。
dubbo配置属性说明
dubbo可供配置的属性有11个,其中较为常用的有
标签 | 用途 | 解释 | 备注 |
---|---|---|---|
<dubbo:service/> | 服务配置 | 用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心 | 暴露服务接口。 |
<dubbo:method/> | 方法配置 | 用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息,可选 | 暴露服务接口的指定方法 |
<dubbo:reference/> | 引用配置 | 用于创建一个远程服务代理,一个引用可以指向多个注册中心 | 接收暴露的接口。 |
<dubbo:protocol/> | 协议配置 | 用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受 | RPC协议的相关设置,只需要在服务提供端设置,用于暴露接口。 |
<dubbo:application/> | 应用配置 | 用于配置当前应用信息,不管该应用是提供者还是消费者 | 项目应用的个性化信息 |
<dubbo:registry/> | 注册中心配置 | 用于配置连接注册中心相关信息 | 注册中心的相关配置 |
<dubbo:monitor/> | 监控中心配置 | 用于配置连接监控中心相关信息,可选 | 监控中心的相关配置 |
<dubbo:provider/> | 提供方配置 | 当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选 | 服务提供端的一些统一配置 |
<dubbo:consumer/> | 消费方配置 | 当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选 | 服务消费端的一些统一配置 |
<dubbo:module/> | 模块配置 | 用于配置当前模块信息,可选 | |
<dubbo:argument/> | 参数配置 | 用于指定方法参数配置,可选 |
示例:对这些属性简单的配置
服务提供者
<?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://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://dubbo.apache.org/schema/dubbo
http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="spring-provider" />
<!-- 使用multicast广播注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<!-- 监控中心设置 -->
<dubbo:monitor protocol="registry"></dubbo:monitor>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.lyj.service.ProviderService" ref="providerService">
<dubbo:method name="hello"></dubbo:method>
</dubbo:service>
<!-- 统一配置,对所有暴露的接口有效 -->
<dubbo:provider timeout="1000"/>
</beans>
服务消费者
<?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://dubbo.apache.org/schema/dubbo" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://dubbo.apache.org/schema/dubbo
http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,可自定义 -->
<dubbo:application name="spring-consumer" />
<!-- 使用multicast广播注册中心暴露发现服务地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<!-- 监控中心监控设置,直连监控中心服务器地址或者从注册中心发现 -->
<dubbo:monitor protocol="registry"></dubbo:monitor>
<!-- <dubbo:monitor address="127.0.0.1:7070"></dubbo:monitor> -->
<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
<dubbo:reference id="providerService" interface="com.lyj.service.ProviderService">
<dubbo:method name="hello"/>
</dubbo:reference>
<!-- 服务消费者的统一配置 -->
<dubbo:consumer check="false"/>
</beans>
dubbo配置覆盖策略
当我们为暴露的接口做服务治理的配置时,有些配置参数可以在多个地方设置,比如配置服务响应超时属性,配置这个属性我们甚至可以在六个地方进行配置。这六个地方也是对服务接口的暴露和调用进行配置的常用地方。分别是
服务提供端全局设置dubbo.provider
服务消费端全局设置dubbo.consumer
服务提供段接口设置dubbo.service
服务消费端接口设置dubbo.reference
服务提供端方法设置dubbo.method
服务消费端方法设置dubbo.method
那么如果我们真的在六个地方都配置了的话,它的覆盖策略是什么?
以timeout属性为例,覆盖策略应该是粒度越小,越不被覆盖,同等粒度,消费端优先
而官方的解释是这样的:
- 方法级优先,接口级次之,全局配置再次之。
- 如果级别一样,则消费方优先,提供方次之。
dubbo配置服务治理
服务治理是dubbo的核心,如果缺少服务治理,那么分布式的意义将十不存一,这里将对dubbo的服务治理进行个人理解的一些记录说明。
功能 | 作用 |
---|---|
启动时检查 | 在启动时检查依赖的服务是否可用 |
重试次数配置 | 配置dubbo服务重试次数 |
集群容错 | 集群调用失败时,Dubbo 提供的容错方案 |
负载均衡 | Dubbo 提供的集群负载均衡策略 |
线程模型 | 配置 Dubbo 中的线程模型 |
直连提供者 | Dubbo 中点对点的直连方式 |
只订阅 | 只订阅不注册 |
多协议 | 在 Dubbo 中配置多协议 |
多注册中心 | 在 Dubbo 中把同一个服务注册到多个注册中心上 |
服务分组 | 使用服务分组区分服务接口的不同实现 |
静态服务 | 将 Dubbo 服务标识为非动态管理模式 |
多版本 | 在 Dubbo 中为同一个服务配置多个版本 |
分组聚合 | 通过分组对结果进行聚合并返回聚合后的结果 |
参数验证 | 在 Dubbo 中进行参数验证 |
json泛化调用 | 支持Json字符串参数的泛化调用 |
msgpack序列化 | 在Dubbo中使用msgpack序列化 |
provider超时打断 | Dubbo provider执行超时释放执行线程 |
指定Ip Port调用Provider | 对于Provider集群中注册的多个实例,指定Ip:Port进行调用 |
收集Dubbo广播响应 | Dubbo broadcast2 广播模式收集所有服务提供者的接口响应 |
结果缓存 | 通过缓存结果加速访问速度 |
使用泛化调用 | 实现一个通用的服务测试框架,可通过 GenericService 调用所有服务实现 |
Protobuf | 使用 IDL 定义服务 |
GoogleProtobuf 对象泛化调用 | 对 Google Protobuf 对象进行泛化调用 |
实现泛化调用 | 实现一个通用的远程服务 Mock 框架,可通过实现 GenericService 接口处理所有服务请求 |
回声测试 | 通过回声测试检测 Dubbo 服务是否可用 |
上下文信息 | 通过上下文存放当前调用过程中所需的环境信息 |
隐式参数 | 通过 Dubbo 中的 Attachment 在服务消费方和提供方之间隐式传递参数 |
异步执行 | Dubbo 服务提供方的异步执行 |
异步调用 | 在 Dubbo 中发起异步调用 |
本地调用 | 在 Dubbo 中进行本地调用 |
参数回调 | 通过参数回调从服务器端调用客户端逻辑 |
事件通知 | 在调用之前、调用之后、出现异常时的事件通知 |
本地存根 | 在 Dubbo 中利用本地存根在客户端执行部分逻辑 |
本地伪装 | 如何在 Dubbo 中利用本地伪装实现服务降级 |
延迟暴露 | 延迟暴露 Dubbo 服务 |
并发控制 | Dubbo 中的并发控制 |
连接控制 | Dubbo 中服务端和客户端的连接控制 |
延迟连接 | 在 Dubbo 中配置延迟连接 |
粘滞连接 | 为有状态服务配置粘滞连接 |
TLS | 通过 TLS 保证传输安全 |
令牌验证 | 通过令牌验证在注册中心控制权限 |
路由规则 | 通过 Dubbo 中的路由规则做服务治理 |
旧路由规则 | 在 Dubbo 2.6.x 版本以及更早的版本中配置路由规则 |
配置规则 | 在 Dubbo 中配置应用级治理规则和服务级治理规则 |
旧配置规则 | Dubbo 中旧版本的规则配置方式 |
服务降级 | 降级 Dubbo 服务 |
消费端线程池模型 | Dubbo 消费端线程池模型用法 |
优雅停机 | 让 Dubbo 服务完成优雅停机 |
主机绑定 | 在 Dubbo 中绑定主机名 |
主机配置 | 自定义 Dubbo 服务对外暴露的主机地址 |
注册信息简化 | 减少注册中心上服务的注册数据 |
日志适配 | 在 Dubbo 中适配日志框架 |
访问日志 | 配置 Dubbo 的访问日志 |
服务容器 | 使用 Dubbo 中的服务容器 |
ReferenceConfig 缓存 | 在 Dubbo 中缓存 ReferenceConfig |
只注册 | 只注册不订阅 |
分布式事务 | Dubbo 中分布式事务的支持 |
导出线程堆栈 | 在 Dubbo 自动导出线程堆栈来保留现场 |
Kryo 和 FST 序列化 | 在 Dubbo 中使用高效的 Java 序列化(Kryo 和 FST) |
Netty4 支持 | 在 Dubbo 中配置 Netty4 |
dubbo服务治理是核心内容