https://blog.csdn.net/zht741322694/article/details/78926345
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/zht741322694/article/details/78926345 </div>
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-cd6c485e8b.css">
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-cd6c485e8b.css">
<div class="htmledit_views" id="content_views">
前言:
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
其核心部分包含:
1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
其主要特性包含:
(1) 连通性:
-
注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小
-
监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示
-
服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销
-
服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销
-
注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外
-
注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者
-
注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表
-
注册中心和监控中心都是可选的,服务消费者可以直连服务提供者
(2) 健状性:
-
监控中心宕掉不影响使用,只是丢失部分采样数据
-
数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务
-
注册中心对等集群,任意一台宕掉后,将自动切换到另一台
-
注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯
-
服务提供者无状态,任意一台宕掉后,不影响使用
-
服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复
(3) 伸缩性:
-
注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心
-
服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者
想要使用一个服务框架,首先得对它的基础内容做一定的了解,下面我们来了解一下dubbo在XML配置文件中各标签以及配置属性的含义
<dubbo:application/> 应用配置信息,不管是提供者还是消费者。XML解析所对应的bean为com.alibaba.dubbo.config.ApplicationConfig
可配置的属性有:
标签 | 属性名称 | 对应URL参数 | 类型 | 在此标签中是否必填 | 缺省值 | 此标签具有什么作用 | 对应的属性名称配置描述 | 兼 容 性( 供 参 考) |
name | application | string | 必填 |
| 服务治理 | 当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样,此参数不是匹配条件,你当前项目叫什么名字就填什么,和提供者消费者角色无关,比如:kylin应用调用了morgan应用的服务,则kylin项目配成kylin,morgan项目配成morgan,可能kylin也提供其它服务给别人使用,但kylin项目永远配成kylin,这样注册中心将显示kylin依赖于morgan | 1.0.16以上版本 | |
organization | organization | string | 可选 |
| 服务治理 | 组织名称(BU或部门),用于注册中心区分服务来源,此配置项建议不要使用autoconfig,直接写死在配置中,比如china,intl,itu,crm,asc,dw,aliexpress等 | 2.0.0以上版本 | |
organization | organization | string | 可选 |
| 服务治理 | 用于服务分层对应的架构。如,intl、china。不同的架构使用不同的分层。 | 2.0.7以上版本 | |
environment | environment | string | 可选 |
| 服务治理 | 应用环境,如:develop/test/product,不同环境使用不同的缺省值,以及作为只用于开发测试功能的限制条件 | 2.0.0以上版本 | |
owner | owner | string | 可选 |
| 服务治理 | 应用负责人,用于服务治理,请填写负责人公司邮箱前缀 | 2.0.5以上版本 |
<dubbo:registry/>注册中心配置信息,可以配置多个,递增配置条目即可。XML解析对应的bean为com.alibaba.dubbo.config.RegistryConfig
可配置的属性有:
标签 | 属性名称 | 对应URL参数 | 类型 | 在此标签中是否必填 | 缺 省 值 | 此标签具有什么作用 | 对应的属性名称配置描述 | 兼 容 性( 供 参 考) |
id |
| string | 可选 |
| 配置关联 | 注册中心引用BeanId,可以在<dubbo:service registry="">或<dubbo:reference registry="">中引用此ID | 1.0.16以上版本 | |
address | string | 必填 |
| 服务发现 | 注册中心服务器地址,如果地址没有端口缺省为9090,同一集群内的多个地址用逗号分隔,如:ip:port,ip:port,不同集群的注册中心,请配置多个<dubbo:registry>标签 | 1.0.16以上版本 | ||
protocol | <protocol> | string | 可选 | dubbo | 服务发现 | 注同中心地址协议,支持dubbo, http, local三种协议,分别表示,dubbo地址,http地址,本地注册中心 | 2.0.0以上版本 | |
port | <port> | int | 可选 | 9090 | 服务发现 | 注册中心缺省端口,当address没有带端口时使用此端口做为缺省值 | 2.0.0以上版本 | |
username | <username> | string | 可选 |
| 服务治理 | 登录注册中心用户名,如果注册中心不需要验证可不填 | 2.0.0以上版本 | |
password | <password> | string | 可选 |
| 服务治理 | 登录注册中心密码,如果注册中心不需要验证可不填 | 2.0.0以上版本 | |
transport | registry. transporter | string | 可选 | netty | 性能调优 | 网络传输方式,可选mina,netty | 2.0.0以上版本 | |
timeout | registry.timeout | int | 可选 | 5000 | 性能调优 | 注册中心请求超时时间(毫秒) | 2.0.0以上版本 | |
file | registry.file | string | 可选 |
| 服务治理 | 使用文件缓存注册中心地址列表及服务提供者列表,应用重启时将基于此文件恢复,注意:两个注册中心不能使用同一文件存储 | 2.0.0以上版本 | |
wait | registry.wait | int | 可选 | 0 | 性能调优 | 停止时等待通知完成时间(毫秒) | 2.0.0以上版本 | |
check | check | boolean | 可选 | true | 服务治理 | 注册中心不存在时,是否报错 | 2.0.0以上版本 | |
register | register | boolean | 可选 | true | 服务治理 | 是否向此注册中心注册服务,如果设为false,将只订阅,不注册 | 2.0.5以上版本 | |
subscribe | subscribe | boolean | 可选 | true | 服务治理 | 是否向此注册中心订阅服务,如果设为false,将只注册,不订阅 | 2.0.5以上版本 | |
dynamic | dynamic | boolean | 可选 | true | 服务治理 | 服务是否动态注册,如果设为false,注册后将显示后disable状态,需人工启用,并且服务提供者停止时,也不会自动取消册,需人工禁用。 | 2.0.5以上版本 |
<dubbo:protocol/>服务提供者所暴露的协议配置信息,可配置多个此标签,需要在<dubbo:service>中通过protocol属性指定使用的协议。 XML解析对应的bean为com.alibaba.dubbo.config.ProtocolConfig
可配置的属性有:
标签 | 属性 | 对应URL参数 | 类型 | 是否必填 | 缺省值 | 作用 | 描述 | 兼容性 |
id |
| string | 可选 | dubbo | 配置关联 | 协议BeanId, 可以在<dubbo:service proivder=""> 中引用此ID | 2.0.5以上版本 | |
name | <protocol> | string | 必填 | dubbo | 性能调优 | 协议名称 | 2.0.5以上版本 | |
port | <port> | int | 可选 | dubbo协议缺省端口为20880, rmi协议缺省端口为1099, http和hessian协议缺省端口为80 | 服务发现 | 服务端口 | 2.0.5以上版本 | |
host | <host> | string | 可选 | 自动查找本机IP | 服务发现 | -服务主机名, 多网卡选择 或指定VIP及 域名时使用, 为空则自动 查找本机IP, -建议不要配置, 让Dubbo 自动获取本机IP | 2.0.5以上版本 | |
threadpool | threadpool | string | 可选 | fixed | 性能调优 | 线程池类型, 可选: fixed/cached | 2.0.5以上版本 | |
threads | threads | int | 可选 | 100 | 性能调优 | 服务线程池 大小(固定大小) | 2.0.5以上版本 | |
iothreads | threads | int | 可选 | cpu个数+1 | 性能调优 | io线程池大小 (固定大小) | 2.0.5以上版本 | |
accepts | accepts | int | 可选 | 0 | 性能调优 | 服务提供方最 大可接受连接数 | 2.0.5以上版本 | |
payload | payload | int | 可选 | 88388608(=8M) | 性能调优 | 请求及响应数 据包大小限制, 单位:字节 | 2.0.5以上版本 | |
codec | codec | string | 可选 | dubbo | 性能调优 | 协议编码方式 | 2.0.5以上版本 | |
serialization | serialization | string | 可选 | dubbo协议缺省为hessian2,rmi协议缺省为java,http协议缺省为json | 性能调优 | 协议序列化方式, 当协议 支持多种序 列化方式时 使用,比如: dubbo协议的dubbo, hessian2, java, compactedjava,以及http协议的json等 | 2.0.5以上版本 | |
accesslog | accesslog | string/ boolean | 可选 |
| 服务治理 | 设为true,将向logger中输出 访问日志,也可填写访问日志文件路径,直接把访问日志输出到指定文件 | 2.0.5以上版本 | |
path | <path> | string | 可选 |
| 服务发现 | 提供者上下文路径,为服务path的前缀 | 2.0.5以上版本 | |
server | server | string | 可选 | dubbo协议缺省为netty,http协议缺省为servlet | 性能调优 | 协议的服务器端实现类型, 比如: dubbo协议的mina,netty等, http协议的jetty,servlet等 | 2.0.5以上版本 | |
client | client | string | 可选 | dubbo协议缺省为netty | 性能调优 | 协议的客户端实现类型,比如: dubbo协议的mina,netty等 | 2.0.5以上版本 | |
queues | queues | int | 可选 | 0 | 性能调优 | 线程池队列大小,当线程池满时,排队等待执行的队列大小,建议不要设置,当线程程池时应立即失败,重试其它服务提供机器,而不是排队,除非有特殊需求。 | 2.0.5以上版本 | |
charset | charset | string | 可选 | UTF-8 | 性能调优 | 序列化编码 | 2.0.5以上版本 | |
buffer | buffer | int | 可选 | 8192 | 性能调优 | 网络读写缓冲区大小 | 2.0.5以上版本 | |
telnet | telnet | string | 可选 |
| 服务治理 | 所支持的telnet 命令, 多个命令用逗号分隔 | 2.0.5以上版本 | |
register | register | boolean | 可选 | true | 服务治理 | 该协议的服务是否 注册到注册中心 | 2.0.8以上版本 |
<dubbo:service/>服务提供者暴露服务配置,XML解析对应的bean为:com.alibaba.dubbo.config.ServiceConfig可配置的属性有:
标签 | 属性 | 对应URL参数 | 类型 | 是否必填 | 缺省值 | 作用 | 描述 | 兼容性 |
interface |
| class | 必填 |
| 服务发现 | 服务接口名 | 1.0.0以上版本 | |
ref |
| object | 必填 |
| 服务发现 | 服务对象 实现引用 | 1.0.0以上版本 | |
version | version | string | 可选 | 0.0.0 | 服务发现 | 服务版本, 建议使用 两位数字 版本, 如:1.0, 通常在 接口不兼容 时版本 号才需要升级 | 1.0.0以上版本 | |
group | group | string | 可选 |
| 服务发现 | 服务分组, 当一个接 口有多个 实现,可 以用分组 区分 | 1.0.7以上版本 | |
path | <path> | string | 可选 | 缺省为 接口名 | 服务发现 | 服务路径 (注意: 1.0不支持 自定义路径, 总是使用接 口名,如果 有1.0调2.0, 配置服务路 径可能不兼容) | 1.0.12以上版本 | |
delay | delay | int | 可选 | 0 | 性能调优 | 延迟注册服 务时间(毫秒) 设为-1时, 表示延迟到 Spring容器 初始化完成 时暴露服务 | 1.0.14以上版本 | |
timeout | timeout | int | 可选 | 5000 | 性能调优 | 远程服务调 用超时时间 (毫秒) | 2.0.0以上版本 | |
retries | retries | int | 可选 | 2 | 性能调优 | 远程服务调 用重试次数, 不包括第一 次调用,不 需要重试请 设为0 | 2.0.0以上版本 | |
connections | connections | boolean | 可选 | 100 | 性能调优 | 对每个提供 者的最大连 接数,rmi、 http、 hessian 等短连接协 议支持此配置,dubbo 协议长连接 不支持此配置 | 2.0.0以上版本 | |
loadbalance | loadbalance | string | 可选 | random | 性能调优 | 负载均衡策略, 可选值: random, roundrobin, leastactive, 分别表示: 随机,轮循, 最少活跃调用 | 2.0.0以上版本 | |
async | async | boolean | 可选 | false | 性能调优 | 是否缺省异步 执行,不可靠 异步,只是忽 略返回值,不 阻塞执行线程 | 2.0.0以上版本 | |
local | local | class/boolean | 可选 | false | 服务治理 | 设为true,表示 使用缺省代理 类名,即: 接口名 + Local 后缀,服务接 口客户端本地 代理类名, 用于在客户端 执行本地逻辑, 如本地缓存等, 该本地代理类 的构造函数必 须允许传入远 程代理对象, 构造函数如: public XxxServiceLocal XxxService xxxService) | 2.0.0以上版本 | |
mock | mock | class/boolean | 可选 | false | 服务治理 | 设为true,表示 使用缺省Mock 类名,即: 接口名 + Mock 后缀,服务接 口调用失败 Mock实现类, 该Mock类必 须有一个无参 构造函数,与 Local的区别 在于,Local 总是被执行, 而Mock只在 出现非业务 异常(比如超 时,网络异常 等)时执行, Local在远程 调用之前执行,Mock在 远程调用后 执行。 | 2.0.0以上版本 | |
token | token | string/boolean | 可选 | false | 服务治理 | 令牌验证, 为空表示不 开启,如果 为true,表 示随机生成 动态令牌, 否则使用静 态令牌,令 牌的作用是 防止消费者 绕过注册中 心直接访问. 保证注册中 心的授权功 能有效,如 果使用点对
关闭令牌功 能 | 2.0.0以上版本 | |
registry |
| string | 可选 | 缺省向 所有registry 注册 | 配置关联 | 向指定注册 中心注册, 在多个注册 中心时使用, 值为 的id属性,多个注 册中心ID用逗号分 隔,如果不想将该 服务注册到任 何registry,可 将值设为N/A | 2.0.0以上版本 | |
provider |
| string | 可选 | 缺使用 第一个provider 配置 | 配置关联 | 指定provider, 值为 的id属性 | 2.0.0以上版本 | |
deprecated | deprecated | boolean | 可选 | false | 服务治理 | 服务是否过时, 如果设为true, 消费方引用时将 打印服务过时 警告error日志 | 2.0.5以上版本 | |
dynamic | dynamic | boolean | 可选 | true | 服务治理 | 服务是否动态注 册,如果设为false, 注册后将显示 后disable状态, 需人工启用,并且 服务提供者停止 时,也不会自动 取消册, 需人工禁用。 | 2.0.5以上版本 | |
accesslog | accesslog | string/boolean | 可选 | false | 服务治理 | 设为true,将 向logger中输 出访问日志,也 可填写访问日 志文件路径,直 接把访问日志输 出到指定文件 | 2.0.5以上版本 | |
owner | owner | string | 可选 |
| 服务治理 | 服务负责人, 用于服务治理, 请填写负责人 公司邮箱前缀 | 2.0.5以上版本 | |
document | document | string | 可选 |
| 服务治理 | 服务文档URL | 2.0.5以上版本 | |
weight | weight | int | 可选 |
| 性能调优 | 服务权重 | 2.0.5以上版本 | |
executes | executes | int | 可选 | 0 | 性能调优 | 服务提供者每 服务每方法最 大可并行执行 请求数 | 2.0.5以上版本 | |
actives | actives | int | 可选 | 0 | 性能调优 | 每服务消费者 每服务每方法 最大并发调用数 | 2.0.5以上版本 | |
proxy | proxy | string | 可选 | javassist | 性能调优 | 生成动态代理 方式,可选:jdk/javassist | 2.0.5以上版本 | |
cluster | cluster | string | 可选 | failover | 性能调优 | 集群方式,可选: failover/ failfast/ failsafe/ failback/ forking | 2.0.5以上版本 | |
filter | service.filter | string | 可选 | default | 性能调优 | 服务提供方远 程调用过程拦 截器名称,多 个名称用逗号分隔 | 2.0.5以上版本 | |
listener | exporter.listener | string | 可选 | default | 性能调优 | 服务提供方导 出服务监听器 名称,多个名 称用逗号分隔 |
| |
protocol |
| string | 可选 |
| 配置关联 | 使用指定的协 议暴露服务, 在多协议时使用, 值为 的id属性,多个 协议ID用逗号分隔 | 2.0.5以上版本 | |
layer | layer | string | 可选 |
| 服务治理 | 服务提供者所 在的分层。如: | 2.0.7以上版本 | |
register | register | boolean | 可选 | true | 服务治理 | 该协议的服务 是否注册到 注册中心 | 2.0.8以上版本 |
<dubbo:provider/>服务提供者缺省值配置,该标签为<dubbo:service>和<dubbo:protocol>标签的缺省值设置. XML解析对应的bean为:com.alibaba.dubbo.config.ProviderConfig可配置的属性有:
标签 | 属性 | 对应URL参数 | 类型 | 是否必填 | 缺省值 | 作用 | 描述 | 兼容性 |
id |
| string | 可选 | dubbo | 配置关联 | 协议BeanId, 可以在 proivder="">中 引用此ID | 1.0.16以上版本 | |
protocol | <protocol> | string | 可选 | dubbo | 性能调优 | 协议名称 | 1.0.16以上版本 | |
host | <host> | string | 可选 | 自动查 找本机IP | 服务发现 | 服务主机名,多 网卡选择或指定 VIP及域名时使用, 为空则自动查找本 机IP,建议不要 配置,让Dubbo 自动获取本机IP | 1.0.16以上版本 | |
threads | threads | int | 可选 | 100 | 性能调优 | 服务线程池大小 (固定大小) | 1.0.16以上版本 | |
payload | payload | int | 可选 | 88388608 (=8M) | 性能调优 | 请求及响应数据 包大小限制, 单位:字节 | 2.0.0以上版本 | |
path | <path> | string | 可选 |
| 服务发现 | 提供者上下文 路径,为服务 path的前缀 | 2.0.0以上版本 | |
server | server | string | 可选 | dubbo协 议缺省为netty,http 协议缺省 为servlet | 性能调优 | 协议的服务器 端实现类型, 比如:dubbo 协议的mina,netty 等,http协议的 jetty,servlet等 | 2.0.0以上版本 | |
client | client | string | 可选 | dubbo协 议缺省为 netty | 性能调优 | 协议的客户端 实现类型,比如: dubbo协议的 mina,netty等 | 2.0.0以上版本 | |
codec | codec | string | 可选 | dubbo | 性能调优 | 协议编码方式 | 2.0.0以上版本 | |
serialization | serialization | string | 可选 | dubbo 协议缺 省为hessian2, rmi协议 缺省为java, http协议 缺省为 json | 性能调优 | 协议序列化方 式,当协议支 持多种序列化 方式时使用,比 如:dubbo协议的 dubbo,hessian2, java, compactedjava, 以及http协议的 json,xml等 | 2.0.5以上版本 | |
default |
| boolean | 可选 | false | 配置关联 | 是否为缺省协议, 用于多协议 | 1.0.16以上版本 | |
filter | service. filter | string | 可选 |
| 性能调优 | 服务提供方远程 调用过程拦截器 名称,多个名称 用逗号分隔 | 2.0.5以上版本 | |
listener | exporter. listener | string | 可选 |
| 性能调优 | 服务提供方导出 服务监听器名称, 多个名称用逗号 分隔 | 2.0.5以上版本 | |
threadpool | threadpool | string | 可选 | fixed | 性能调优 | 线程池类型, 可选: fixed/cached | 2.0.5以上版本 | |
accepts | accepts | int | 可选 | 0 | 性能调优 | 服务提供者最大 可接受连接数 | 2.0.5以上版本 | |
version | version | string | 可选 | 0.0.0 | 服务发现 | 服务版本,建议使 用两位数字版本, 如:1.0,通常在 接口不兼容时版 本号才需要升级 | 2.0.5以上版本 | |
group | group | string | 可选 |
| 服务发现 | 服务分组,当一个 接口有多个实现, 可以用分组区分 | 2.0.5以上版本 | |
delay | delay | int | 可选 | 0 | 性能调优 | 延迟注册服务时 间(毫秒)- ,设 为-1时,表示延 迟到Spring容器 初始化完成时暴 露服务 | 2.0.5以上版本 | |
timeout | default. timeout | int | 可选 | 5000 | 性能调优 | 远程服务调用超 时时间(毫秒) | 2.0.5以上版本 | |
retries | default. retries | int | 可选 | 2 | 性能调优 | 远程服务调用重 试次数,不包括 第一次调用,不需 要重试请设为0 | 2.0.5以上版本 | |
connections | default. connections | int | 可选 | 0 | 性能调优 | 每服务消费者每 服务使用连接数 | 2.0.5以上版本 | |
loadbalance | default. loadbalance | string | 可选 | random | 性能调优 | 负载均衡策略, 可选:random, roundrobin, leastactive, 分别表示: 随机,轮循, 最少活跃调用 | 2.0.5以上版本 | |
async | default. async | boolean | 可选 | false | 性能调优 | 是否缺省异步 执行,不可靠 异步,只是忽略 返回值,不阻塞 执行线程 | 2.0.5以上版本 | |
local | local | boolean | 可选 | false | 服务治理 | 设为true,表示 使用缺省代理 类名,即: 接口名 + Local后缀。 | 2.0.5以上版本 | |
mock | mock | boolean | 可选 | false | 服务治理 | 设为true,表示使 用缺省Mock类名, 即:接口名 + Mock 后缀。 | 2.0.5以上版本 | |
token | token | boolean | 可选 | false | 服务治理 | 令牌验证,为空表 示不开启,如果为 true,表示随机生 成动态令牌 | 2.0.5以上版本 | |
registry | registry | string | 可选 | 缺省向 所有 registry 注册 | 配置关联 | 向指定注册中心 注册,在多个注 册中心时使用, 值为 的id属性,多个注 册中心ID用逗号分 隔,如果不想将该 服务注册到任何 registry,可将值 设为N/A | 2.0.5以上版本 | |
dynamic | dynamic | boolean | 可选 | true | 服务治理 | 服务是否动态注册, 如果设为false,注 册后将显示后 disable状态,需 人工启用,并且服 务提供者停止时, 也不会自动取消 册,需人工禁用。 | 2.0.5以上版本 | |
accesslog | accesslog | string/boolean | 可选 | false | 服务治理 | 设为true,将向 logger中输出访 问日志,也可填 写访问日志文件 路径,直接把访 问日志输出到指 定文件 | 2.0.5以上版本 | |
owner | owner | string | 可选 |
| 服务治理 | 服务负责人,用 于服务治理,请 填写负责人公 司邮箱前缀 | 2.0.5以上版本 | |
document | document | string | 可选 |
| 服务治理 | 服务文档URL | 2.0.5以上版本 | |
weight | weight | int | 可选 |
| 性能调优 | 服务权重 |