Dubbo 2.7(http://dubbo.apache.org/zh/docs/v2.7/)
内置配置类
配置类 | 标签 | 用途 | 解释 |
---|---|---|---|
ProtocolConfig | 协议配置 | 用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受 | |
ApplicationConfig | dubbo:application | 应用配置 | 用于配置当前应用信息,不管该应用是提供者还是消费者 |
ModuleConfig | 模块配置 | 用于配置当前模块信息,可选 | |
RegistryConfig | dubbo:registry | 注册中心配置 | 用于配置连接注册中心相关信息 |
MonitorConfig | dubbo:monitor | 监控中心配置 | 用于配置连接监控中心相关信息,可选 |
ProviderConfig | dubbo:provider | 提供方配置 | 当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选 |
ConsumerConfig | dubbo:consumer | 消费方配置 | 当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选 |
MethodConfig | dubbo:method | 方法配置 | 用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息 |
ArgumentConfig | dubbo:argument | 参数配置 | 用于指定方法参数配置 |
通过申明对应的 Spring 扩展标签,在 Spring 应用上下文中将自动生成相应的配置 Bean。
dubbo.properties
配置属性能够映射到 ApplicationConfig
、ProtocolConfig
以及 RegistryConfig
的字段。从某种意义上来说,dubbo.properties
也是 Dubbo 的外部化配置。
映射规则
将 XML 配置的标签名,加属性名,用点分隔,多个属性拆成多行
- 比如:
dubbo.application.name=foo
等价于`` - 比如:
dubbo.registry.address=10.20.153.10:9090
等价于``
如果 XML 有多行同名标签配置,可用 id 号区分,如果没有 id 号将对所有同名标签生效
- 比如:
dubbo.protocol.rmi.port=1234
等价于``2 - 比如:
dubbo.registry.china.address=10.20.153.10:9090
等价于``
下面是 dubbo.properties 的一个典型配置:
dubbo.application.name=foo
dubbo.application.owner=bar
dubbo.registry.address=10.20.153.10:9090
配置类 | 外部化配置属性前缀 | 用途 |
---|---|---|
ProtocolConfig | dubbo.protocol | 协议配置 |
ApplicationConfig | dubbo.application | 应用配置 |
ModuleConfig | dubbo.module | 模块配置 |
RegistryConfig | dubbo.registry | 注册中心配置 |
MonitorConfig | dubbo.monitor | 监控中心配置 |
ProviderConfig | dubbo.provider | 提供方配置 |
ConsumerConfig | dubbo.consumer | 消费方配置 |
属性配置
属性配置的方式来配置你的 Dubbo 应用 如果你的应用足够简单,例如,不需要多注册中心或多协议,并且需要在spring容器中共享配置,那么,我们可以直接使用 dubbo.properties 作为默认配置。Dubbo 可以自动加载 classpath 根目录下的 dubbo.properties
properties配置
dubbo扫描包路径
dubbo.scan.base-packages=com.alibaba.boot.dubbo.demo.provider.service
dubbo服务版本号,用于灰色发布相关控制
dubbo.application.version=1.0
应用负责人,可选,用于服务治理,请填写负责人公司邮箱前缀
dubbo.application.owner= 可选,应用负责人,用于服务治理,请填写负责人公司邮箱前缀
组织名(BU或部门)
dubbo.application.organization=xx
分层
dubbo.application.architecture=xxx
环境 如:dev/test/run
dubbo.application.environment=xxx
Java代码编译器
dubbo.application.compiler=xxx
日志输出方式
dubbo.application.logger=xxx
注册中心 0
dubbo.application.registries[0].address=zookeeper:#127.0.0.1:2181=xxx
注册中心 1
dubbo.application.registries[1].address=zookeeper:#127.0.0.1:2181=xxx
服务监控
dubbo.application.monitor.address=xxx
这里注意多个注册中心的配置方式。下面介绍单个注册中心的配置方式。 注册中心配置类:常用 ZooKeeper 作为注册中心进行服务注册。
Dubbo 注册中心配置
注册中心引用BeanId,可以在<dubbo:service registry="">或<dubbo:reference registry="">中引用此ID
dubbo.application.registries[1].id=xxx
注册中心地址
dubbo.application.registries[1].address=xxx
注册中心登录用户名
dubbo.application.registries[1].username=xxx
注册中心登录密码
dubbo.application.registries[1].password=xxx
注册中心缺省端口
dubbo.application.registries[1].port=xxx
注册中心协议
dubbo.application.registries[1].protocol=xxx
网络传输方式,可选mina,netty
dubbo.application.registries[1].transport =xxx
使用文件缓存注册中心地址列表及服务提供者列表,应用重启时将基于此文件恢复,注意:两个注册中心不能使用同一文件存储
dubbo.application.registries[1].file=xxx
## registries 集合 registry 对象
dubbo.application.registries[0].transporter=xxx
dubbo.application.registries[0].server=xxx
dubbo.application.registries[0].client=xxx
dubbo.application.registries[0].cluster=xxx
dubbo.application.registries[0].group=xxx
dubbo.application.registries[0].version=xxx
注册中心请求超时时间(毫秒)
dubbo.application.registries[0].timeout=xxx
注册中心会话超时时间(毫秒)
dubbo.application.registries[0].session=xxx
动态注册中心列表存储文件
dubbo.application.registries[0].file=xxx
停止时等候完成通知时间
dubbo.application.registries[0].wait=xxx
启动时检查注册中心是否存在
dubbo.application.registries[0].check=xxx
在该注册中心上注册是动态的还是静态的服务【 服务是否动态注册,如果设为false,注册后将显示后disable状态,需人工启用,并且服务提供者停止时,也不会自动取消册,需人工禁用。 】
dubbo.application.registries[0].dynamic=xxx
在该注册中心上服务是否暴露
dubbo.application.registries[0].register=xxx
在该注册中心上服务是否引用【 是否向此注册中心订阅服务,如果设为false,将只注册,不订阅 】
dubbo.application.registries[0].subscribe=xxx
停止时等待通知完成时间(毫秒)
dubbo.application.registries[0]. wait =xxx
Dubbo 服务协议配置
Dubbo协议的,默认也是用的dubbo协议
#Dubbo支持dubbo、rmi、hessian、http、webservice、thrift、redis等多种协议,但是Dubbo官网是推荐我们
#使用Dubbo协议的,默认也是用的dubbo协议。
dubbo.protocol.name=dubbo
协议端口号
dubbo协议缺省端口为20880,rmi协议缺省端口为1099,http和hessian协议缺省端口为80
如果配置为**-1** 或者 **没有**配置port,则会分配一个没有被占用的端口。Dubbo 2.4.0+,分配的端口在协议缺省端口的基础上增长,确保端口段可控。
dubbo.protocol.port=-1
服务IP地址(多网卡时使用) , 自动查找本机IP
-服务主机名,多网卡选择或指定VIP及域名时使用,为空则自动查找本机IP,-建议不要配置,让Dubbo自动获取本机IP
性能调优 , 请求过大的问题
dubbo.protocol.payload =xxx
可选,88388608 = 8M 请求及响应数据包大小限制,单位:字节
上下文路径
dubbo.application.protocol.contextpath=xxx
线程池类型 【 线程池类型,可选:fixed/cached 】
dubbo.application.protocol.threadpool=xxx
线程池大小(固定大小)
dubbo.application.protocol.threads=xxx
IO线程池大小(固定大小)
dubbo.application.protocol.iothreads=xxx
线程池队列大小
dubbo.application.protocol.queues=xxx
最大接收连接数
dubbo.application.protocol.accepts=xxx
协议编码
dubbo.application.protocol.codec=xxx
序列化方式【 当协议支持多种序列化方式时使用,比如:dubbo协议的dubbo,hessian2,java,compactedjava,以及http协议的json等 】
dubbo.application.protocol.serialization=xxx
字符集
dubbo.application.protocol.charset=xxx
最大请求数据长度
dubbo.application.protocol.payload=xxx
缓存区大小
dubbo.application.protocol.buffer=xxx
心跳间隔
dubbo.application.protocol.heartbeat=xxx
访问日志【 设为true,将向logger中输出访问日志,也可填写访问日志文件路径,直接把访问日志输出到指定文件 】
dubbo.application.protocol.accesslog=xxx
网络传输方式
dubbo.application.protocol.transporter=xxx
信息交换方式
dubbo.application.protocol.exchanger=xxx
信息线程模型派发方式
dubbo.application.protocol.dispatcher=xxx
对称网络组网方式
dubbo.application.protocol.networker=xxx
服务器端实现 【 协议的服务器端实现类型,比如:dubbo协议的mina,netty等,http协议的jetty,servlet等 】
dubbo.application.protocol.server=xxx
客户端实现 【 协议的客户端实现类型,比如:dubbo协议的mina,netty等 】
dubbo.application.protocol.client=xxx
支持的telnet命令,多个命令用逗号分隔
dubbo.application.protocol.telnet=xxx
命令行提示符
dubbo.application.protocol.prompt=xxx
status检查
dubbo.application.protocol.status=xxx
是否注册 【 该协议的服务是否注册到注册中心 】
dubbo.application.protocol.register=xxx
dubbo.consumer. validation 是否启用JSR303标准注解验证,如果启用,将对方法参数上的注解进行校验
启动时检查提供者是否存在,true报错,false忽略
当application同时具备provider和consumer身份时,可能会出现启动循环依赖问题,可以在dubbo.consumer.check = false 设置启动不检查依赖
监控中心配置可选 添加monitor监控
dubbo.monitor.protocol=N/A
重写与优先级
优先级从高到低:
- JVM -D 参数:当你部署或者启动应用时,它可以轻易地重写配置,比如,改变 dubbo 协议端口;
- XML:XML 中的当前配置会重写 dubbo.properties 中的;
- Properties:默认配置,仅仅作用于以上两者没有配置时。
- 如果在 classpath 下有超过一个 dubbo.properties 文件,比如,两个 jar 包都各自包含了 dubbo.properties,dubbo 将随机选择一个加载,并且打印错误日志。
- 如果
id
没有在protocol
中配置,将使用name
作为默认属性。
注解配置
以注解配置的方式来配置你的 Dubbo 应用
@EnableDubbo 一般写在启动类上和Spring相关项目整合使用
@EnableDubbo整合了三个注解@EnableDubboConfig、@DubboComponentScan、@EnableDubboLifecycle。@EnableDubbo的功能都是由这三个注解完成的。
@EnableDubboConfig引入类DubboConfigConfigurationRegistrar,将于解析配置相关的类注册到spring容器;
@DubboComponentScan引入类DubboComponentScanRegistrar,用于指定@Service扫描路径;
@EnableDubboLifecycle引入类DubboLifecycleComponentRegistrar,注册了两个监听器到spring容器。
1.指定Spring扫描路径
@Configuration
@EnableDubbo(scanBasePackages = "org.apache.dubbo.samples.simple.annotation.impl")
@PropertySource("classpath:/spring/dubbo-provider.properties")
static public class ProviderConfiguration {
}
@DubboService 服务提供方 注解暴露服务
名称 | 类型 | 是否必填 | 缺省值 | 作用 | 描述 |
---|---|---|---|---|---|
version | string | 可选 | 0.0.0 | 服务发现 | 服务版本,建议使用两位数字版本,如:1.0,通常在接口不兼容时版本号才需要升级 |
group | string | 可选 | 服务发现 | 服务分组,当一个接口有多个实现,可以用分组区分 | |
delay | int | 可选 | 0 | 性能调优 | 延迟注册服务时间(毫秒) ,设为-1时,表示延迟到Spring容器初始化完成时暴露服务 |
timeout | int | 可选 | 5000 | 性能调优 | 远程服务调用超时时间(毫秒) |
retries | int | 可选 | 2 | 性能调优 | 远程服务调用重试次数,不包括第一次调用,不需要重试请设为0 |
connections | boolean | 可选 | 100 | 性能调优 | 对每个提供者的最大连接数,rmi、http、hessian等短连接协议支持此配置,dubbo协议长连接不支持此配置 |
loadbalance | string | 可选 | random | 性能调优 | 负载均衡策略,可选值:random,roundrobin,leastactive,分别表示:随机,轮循,最少活跃调用 |
async | boolean | 可选 | false | 性能调优 | 是否缺省异步执行,不可靠异步,只是忽略返回值,不阻塞执行线程 |
local | class/boolean | 可选 | false | 服务治理 | 设为true,表示使用缺省代理类名,即:接口名 + Local后缀,服务接口客户端本地代理类名,用于在客户端执行本地逻辑,如本地缓存等,该本地代理类的构造函数必须允许传入远程代理对象,构造函数如:public XxxServiceLocal(XxxService xxxService) |
mock | class/boolean | 可选 | false | 服务治理 | 设为true,表示使用缺省Mock类名,即:接口名 + Mock后缀,服务接口调用失败Mock实现类,该Mock类必须有一个无参构造函数,与Local的区别在于,Local总是被执行,而Mock只在出现非业务异常(比如超时,网络异常等)时执行,Local在远程调用之前执行,Mock在远程调用后执行。 |
token | string/boolean | 可选 | false | 服务治理 | 令牌验证,为空表示不开启,如果为true,表示随机生成动态令牌,否则使用静态令牌,令牌的作用是防止消费者绕过注册中心直接访问,保证注册中心的授权功能有效,如果使用点对点调用,需关闭令牌功能 |
register | boolean | 可选 | true | 服务治理 | 该协议的服务是否注册到注册中心 |
provider | string | 可选 | 缺使用第一个provider配置 | 配置关联 | 指定provider,值为<dubbo:provider>的id属性 |
eprecated | boolean | 可选 | false | 服务治理 | 服务是否过时,如果设为true,消费方引用时将打印服务过时警告error日志 |
dynamic | boolean | 可选 | true | 服务治理 | 服务是否动态注册,如果设为false,注册后将显示后disable状态,需人工启用,并且服务提供者停止时,也不会自动取消册,需人工禁用。 |
accesslog | string/boolean | 可选 | false | 服务治理 | 设为true,将向logger中输出访问日志,也可填写访问日志文件路径,直接把访问日志输出到指定文件 |
owner | string | 可选 | 服务治理 | 服务负责人,用于服务治理,请填写负责人公司邮箱前缀 | |
document | string | 可选 | 服务治理 | 服务文档URL | |
weight | int | 可选 | 性能调优 | 服务权重 | |
executes | int | 可选 | 0 | 性能调优 | 服务提供者每服务每方法最大可并行执行请求数 |
actives | int | 可选 | 0 | 性能调优 | 每服务消费者每服务每方法最大并发调用数 |
proxy | string | 可选 | javassist | 性能调优 | 生成动态代理方式,可选:jdk/javassist |
cluster | string | 可选 | failover | 性能调优 | 集群方式,可选:failover/failfast/failsafe/failback/forking |
filter | string | 可选 | default | 性能调优 | 服务提供方远程调用过程拦截器名称,多个名称用逗号分隔 |
listener | string | 可选 | default | 性能调优 | 服务提供方导出服务监听器名称,多个名称用逗号分隔 |
protocol | string | 可选 | 配置关联 | 使用指定的协议暴露服务,在多协议时使用,值为<dubbo:protocol>的id属性,多个协议ID用逗号分隔 | |
layer | string | 可选 | 服务治理 | 服务提供者所在的分层。如:biz、dao、intl:web、china:acton。 | |
@DubboService
public class DubboxMemberService implements DubboTestService{
@Autowired
private MemberService memberService;
@Override
@Transactional(rollbackFor = Exception.class)
public Member addMember(Member member) {
member.setMobile("13888888889");
memberService.save(member);
return member;
}
}
@DubboReference 服务消费方 注解引用服务
常用相关属性配置
名称 | 类型 | 是否必填 | 缺省值 | 作用 | 描述 |
---|---|---|---|---|---|
version | string | 可选 | 服务发现 | 服务版本,与服务提供者的版本一致 | |
group | string | 可选 | 服务发现 | 服务分组,当一个接口有多个实现,可以用分组区分,必需和服务提供方一致 | |
timeout | long | 可选 | 缺省使用<dubbo:consumer>的timeout | 性能调优 | 服务方法调用超时时间(毫秒) |
retries | int | 可选 | 缺省使用<dubbo:consumer>的retries | 性能调优 | 远程服务调用重试次数,不包括第一次调用,不需要重试请设为0 |
connections | int | 可选 | 缺省使用<dubbo:consumer>的connections | 性能调优 | 对每个提供者的最大连接数,rmi、http、hessian等短连接协议支持此配置,dubbo协议长连接不支持此配置 |
loadbalance | string | 可选 | 缺省使用<dubbo:consumer>的loadbalance | 性能调优 | 负载均衡策略,可选值:random,roundrobin,leastactive,分别表示:随机,轮循,最少活跃调用 |
async | boolean | 可选 | 缺省使用<dubbo:consumer>的async | 性能调优 | 是否异步执行,不可靠异步,只是忽略返回值,不阻塞执行线程 |
generic | boolean | 可选 | 缺省使用<dubbo:consumer>的generic | 服务治理 | 是否缺省泛化接口,如果为泛化接口,将返回GenericService |
check | boolean | 可选 | 缺省使用<dubbo:consumer>的check | 服务治理 | 启动时检查提供者是否存在,true报错,false忽略 |
url | string | 可选 | 服务治理 | 点对点直连服务提供者地址,将绕过注册中心 | |
local | class | 可选 | 服务治理 | 服务接口客户端本地代理类名,用于在客户端执行本地逻辑,如本地缓存等,该本地代理类的构造函数必须允许传入远程代理对象,构造函数如:public XxxServiceLocal(XxxService xxxService) | |
mock | class | 可选 | 服务治理 | 服务接口调用失败Mock实现类名,该Mock类必须有一个无参构造函数,与Local的区别在于,Local总是被执行,而Mock只在出现非业务异常(比如超时,网络异常等)时执行,Local在远程调用之前执行,Mock在远程调用后执行。 | |
proxy | boolean | 可选 | javassist | 性能调优 | 选择动态代理实现策略,可选:javassist, jdk |
client | string | 可选 | 性能调优 | 客户端传输类型设置,如Dubbo协议的netty或mina。 | |
owner | string | 可选 | 服务治理 | 调用服务负责人,用于服务治理,请填写负责人公司邮箱前缀 | |
actives | int | 可选 | 0 | 性能调优 | 每服务消费者每服务每方法最大并发调用数 |
proxy | string | 可选 | javassist | 性能调优 | 生成动态代理方式,可选:jdk/javassist |
cluster | string | 可选 | failover | 性能调优 | 集群方式,可选:failover/failfast/failsafe/failback/forking |
filter | string | 可选 | default | 性能调优 | 服务消费方远程调用过程拦截器名称,多个名称用逗号分隔 |
listener | string | 可选 | default | 性能调优 | 服务消费方引用服务监听器名称,多个名称用逗号分隔 |
layer | string | 可选 | 服务治理 | 服务调用者所在的分层。如:biz、dao、intl:web、china:acton。 | |
@RequestMapping("/annotationAction")
public class Controller {
@Reference
private DubboTestService dubboTestService;
public String doSayHello(Member member) {
return dubboTestService.addMember(member);
}
}
1.启动检查
默认情况下dubbo是开启自动检查的,即当项目启动时会自动检查其依赖的服务是否开启,如果没开是会阻止spring的初始化的,即check=true;我们可以将check置为false来关闭启动时检查,如我们在测试或者对其他服务没有依赖的时候可以关闭检查;在springboot中我们可以进行如下配置来关闭启动时检查:
1、关闭某个服务的启动检查
在引用该服务的@DubboReference 注解上添加check=false,即@DubboReference (check = false)
2、关闭所有服务的启动时检查
在application.properties中添加dubbo.consumer.check=false
2.超时配置 (timeout,默认为1000),重试次数(retries) :生产环境上建议:不支持重试,重试次数为0,由业务发起端控制逻辑实现
当消费者调用提供者时由于网络等原因有可能会造成长时间拿不到响应,而请求还在不断的发过来这就有可能造成线程阻塞,使用timeout设置超时时间当超过该时间就会抛出异常;
当只针对某个服务时:@DubboReference(timeout=XXX)
当针对所有服务时:dubbo.consumer.timeout=XXX
重试次数:当调用失败或超时后重新尝试调用的次数,其值不包含第一次
当只针对某个服务时:@DubboReference(retries=XXX)
当针对所有服务时:dubbo.consumer.retries=XXX
@Method
名称* | 类型 | 是否必填 | 缺省值 | 作用 | 描述 |
---|---|---|---|---|---|
bane | string | 必填 | 标识 | 方法 | |
timeout | int | 可选 | 缺省为的timeout | 性能调优 | 方法调用超时时间(毫秒) |
retries | int | 可选 | 缺省为<dubbo:reference>的retries | 性能调优 | 远程服务调用重试次数,不包括第一次调用,不需要重试请设为0 |
loadbalance | string | 可选 | 缺省为的loadbalance | 性能调优 | 负载均衡策略,可选值:random,roundrobin,leastactive,分别表示:随机,轮循,最少活跃调用 |
async | boolean | 可选 | 缺省为<dubbo:reference>的async | 性能调优 | 是否异步执行,不可靠异步,只是忽略返回值,不阻塞执行线程 |
sent | boolean | 可选 | true | 性能调优 | 异步调用时,标记sent=true时,表示网络已发出数据 |
actives | int | 可选 | 0 | 性能调优 | 每服务消费者最大并发调用限制 |
executes | int | 可选 | 0 | 性能调优 | 每服务每方法最大使用线程数限制- -,此属性只在<dubbo:method>作为<dubbo:service>子标签时有效 |
deprecated | boolean | 可选 | false | 服务治理 | 服务方法是否过时,此属性只在<dubbo:method>作为<dubbo:service>子标签时有效 |
sticky | boolean | 可选 | false | 服务治理 | 设置true 该接口上的所有方法使用同一个provider.如果需要更复杂的规则,请使用用路由 |
return | boolean | 可选 | true | 性能调优 | 方法调用是否需要返回值,async设置为true时才生效,如果设置为true,则返回future,或回调onreturn等方法,如果设置为false,则请求发送成功后直接返回Null |
oninvoke | String | 可选 | 性能调优 | 方法执行前拦截 | |
onreturn | String | 可选 | 性能调优 | 方法执行返回后拦截 | |
onthrow | String | 可选 | 性能调优 | 方法执行有异常拦截 | |
[^https://blog.csdn.net/zcw4237256/article/details/78369213 如有未找到,从此链接查询]: