github测试Demo项目地址:https://github.com/HopeAndStart/spring-dubbp.git
一:概述
本文为Dubbo学习第一步,使用XML配置文件发布与消费服务。文件配置参考Dubbo官网后经过自身Demo项目测试完成编写,当然不对亦或是不全地方欢迎大家补充或自行查看Dubbo官网。当然本文主要还是讲述使用评率较高的配置项
二:服务发布dubbbo:service
服务发布方配置,进行发布服务类型、分组、版本的限定。以及服务发布注册中心、服务发布协议类型、发布延时以及负载均衡、最大连接执行线程数量等关联调优配置。
2.1 服务发现
简单来讲即一个服务发布以后消费方调用需要完全匹配一致的属性,匹配完成才能远程调用消费。共三个属性分别为:interface
、group、version
属性 | 作用 | 默认值 | 描述 |
interface | 服务类型 | 必填项,无默认值 | 个人理解与Spring中依赖注入先匹配对象类型相似 |
group | 服务分组 | 无 | Dubbo采用分组实现多服务实例时的分别消费,要求提供方与消费方一致 |
version | 服务版本 | 0.0.0 | 通常使用情况为接口进行修改后不兼容,如入参修改等 |
2.2 配置关联
Dubbo的服务可以向多注册中心发布,同时也支持多种通信协议。在<dubbo:service>标签中对上述两者可以进行相应定义,注册中心的配置需要<dubbo:registry>,发布协议配置需要<dubbo:protocol>,这两块会有专门文章讲解。目前在这里就是讲怎么在<dubbo:service>中配置两者
属性 | 作用 | 默认值 | 描述 |
registry | 服务发布注册中心 | 默认向所有<dubbo:registry>发布服务 | Dubbo默认情况下向所有配置的注册中心发布服务,如果需要限定服务发布范围则可以在属性registry中填入对应注册中心<dubbo:registry>的id属性,中间" |
protocol | 服务发布协议 | 默认发布所有<dubbo:protocol>配置协议类型 | Dubbo默认情况下发布所有<dubbo:protocol>标签配置协议,需要限定某服务发布通信协议类型可以在属性protocol中填入对应通信协议<dubbo:protocol>的id属性,中间用" |
provider | 属性补全 | 默认使用第一个<dubbo:provider> | 配置很多服务发布,这时许多服务具备公共属性不想逐一填写,则可以配置<dubbo:provider>。当<dubbo:service>中缺少属性配置时就会采用其中的属性配置,当有多个<dubbo:provider>时默认采用第一个,若想指定则在provider属性中写入对应<dubbo:provider>标签id属性即可 |
2.3 服务治理
服务经过服务发现与注册中心、协议类型等关联配置已经可以正常发布、消费。但是在这基础上如果需要对服务进行其它管理,Dubbo中也提供了许多配置属性
属性 | 作用 | 默认值 | 描述 |
token | 令牌 | 无 | 限定消费者只能在注册中心进行服务消费,空值表示不开启,true表示随机生成,固定值相当于密码 |
deprecated | 设置服务过时 | false | 当服务被设置为过时,消费者调用会打印error级别的日志 |
dynamic | 动态注册 | true | 设置为false时需要将服务手动启用才能使用 |
register | 是否注册到注册中心 | true | 设置false以后的协议服务不会发布到注册中心 |
2.3 性能调优
发布服务被调用肯定涉及到性能问题,Dubbo在针对服务发布的层面设计了一些相关属性参数进行调节
属性 | 作用 | 默认值 | 描述 |
delay | 延迟注册服务时间 | 0 | 毫秒级别的设置,-1表示Spring容器初始化完成时暴露服务 |
connnections | 连接数量 | 100 | 短连接协议表示限制的连接数量,长连接表示建立长连接个数 |
loadbalance | 负载均衡策略 | random | random随机、roundrobin轮训、leastactive最少活跃 |
weight | 服务权重 | 无 | |
cluster | 集群方式 | failover | 集群方式,可选:failover/failfast/failsafe/failback/forking |
filter | 拦截器 | default | 服务提供方远程调用过程拦截器名称,多个名称用逗号分隔 |
listener | 监听器 | default | 服务提供方导出服务监听器名称,多个名称用逗号分隔 |
三:服务消费dubbo:reference
服务消费者配置,设置服务发现三大属性interface、group、version。同时还能对Bean注入Id以及发现服务列表注册中心registry进行配置。当然也可以对可获取服务提供发布协议类型进行限定等操作
3.1 服务发现
服务发现相关属性与服务发布dubbo:service介绍一致,注意保持服务发布方相关属性配置与服务消费方相关属性配置一致性。不然无法提供远程服务
3.2 配置关联
属性 | 作用 | 默认值 | 描述 |
id | 声明容器实例ID | 必填项 | 当消费方消费服务提供方提供的多实现服务时,Spring容器就需要ID进行区别注入 |
registry | 声明注册中心 | 默认所有配置注册中心 | 默认将所有<dubbo:registry>的服务列表合并后寻找提供者,指定只需要使用registry属性配置<dubbo:registry>的id属性即可,多个中间用" |
consumer | 默认配置 | 无 | 与provider一致 |
3.3 服务治理
属性 | 作用 | 默认值 | 描述 |
generic | 是否缺省泛化接口 | 缺省使用<dubbo:consumer>的generic | 如果为泛化接口,将返回GenericService |
check | 启动检查服务提供是否存在 | 缺省使用<dubbo:consumer>的check | 启动时检查提供者是否存在,true报错,false忽略 |
url | 绕开注册中心,服务直连 | 点对点直连服务提供者地址,将绕过注册中心 | |
validation | 参数注解校验 | 是否启用JSR303标准注解验证,如果启用,将对方法参数上的注解进行校验 | |
protocol | 消费服务协议类型 | 只调用指定协议的服务提供方,其它协议忽略 | |
stub | 详情如下3.3.1描述 | ||
mock | 详情如下3.3.2描述 |
3.3.1 stub示例
远程服务调用前执行。参数可以为true/false打开关闭,亦或是直接写调用前执行类。当使用boolean变量时默认类名为接口名+Stub,寻找类包路径与接口一致。该类必须提供参数为接口类型的有参构造函数
3.3.2 mock示例
远程服务调用失败后执行。参数与stub一致,使用boolean时默认类名为接口名+Mock,寻找类包路径与接口一致
3.4 性能调优
服务消费的性能调优更多的是倾向于消费调用层面,对响应时间、尝试次数、延迟初始化等方面实现
属性 | 作用 | 默认值 | 描述 |
timeout | 远程调用超时时长 | 缺省使用<dubbo:consumer>的timeout | 服务方法调用超时时间(毫秒) |
retries | 远程调用重试次数 | 2 | 不包括第一次调用 |
filter | 拦截器 | default | 服务消费方远程调用过程拦截器名称,多个名称用逗号分隔 |
listener | 监听器 | default | 服务消费方引用服务监听器名称,多个名称用逗号分隔 |
init | 是否延迟加载 | false | 是否在afterPropertiesSet()时饥饿初始化引用,否则等到有人注入或引用该实例时再初始化 |