github测试Demo项目地址:https://github.com/HopeAndStart/spring-dubbp.git

一:概述

本文为Dubbo学习第一步,使用XML配置文件发布与消费服务。文件配置参考Dubbo官网后经过自身Demo项目测试完成编写,当然不对亦或是不全地方欢迎大家补充或自行查看Dubbo官网。当然本文主要还是讲述使用评率较高的配置项

二:服务发布dubbbo:service

服务发布方配置,进行发布服务类型、分组、版本的限定。以及服务发布注册中心、服务发布协议类型、发布延时以及负载均衡、最大连接执行线程数量等关联调优配置。

2.1 服务发现

简单来讲即一个服务发布以后消费方调用需要完全匹配一致的属性,匹配完成才能远程调用消费。共三个属性分别为:interface、group、version

dubbo服务上传文件 dubbo服务发布_service

属性

作用

默认值

描述

interface

服务类型

必填项,无默认值

个人理解与Spring中依赖注入先匹配对象类型相似

group

服务分组


Dubbo采用分组实现多服务实例时的分别消费,要求提供方与消费方一致

version

服务版本

0.0.0

通常使用情况为接口进行修改后不兼容,如入参修改等

2.2 配置关联

Dubbo的服务可以向多注册中心发布,同时也支持多种通信协议。在<dubbo:service>标签中对上述两者可以进行相应定义,注册中心的配置需要<dubbo:registry>,发布协议配置需要<dubbo:protocol>,这两块会有专门文章讲解。目前在这里就是讲怎么在<dubbo:service>中配置两者

dubbo服务上传文件 dubbo服务发布_service_02

属性

作用

默认值

描述

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中也提供了许多配置属性

dubbo服务上传文件 dubbo服务发布_默认值_03

属性

作用

默认值

描述

token

令牌


限定消费者只能在注册中心进行服务消费,空值表示不开启,true表示随机生成,固定值相当于密码

deprecated

设置服务过时

false

当服务被设置为过时,消费者调用会打印error级别的日志

dynamic

动态注册

true

设置为false时需要将服务手动启用才能使用

register

是否注册到注册中心

true

设置false以后的协议服务不会发布到注册中心

2.3 性能调优

发布服务被调用肯定涉及到性能问题,Dubbo在针对服务发布的层面设计了一些相关属性参数进行调节

dubbo服务上传文件 dubbo服务发布_ide_04

属性

作用

默认值

描述

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服务上传文件 dubbo服务发布_ide_05


服务发现相关属性与服务发布dubbo:service介绍一致,注意保持服务发布方相关属性配置与服务消费方相关属性配置一致性。不然无法提供远程服务

3.2 配置关联

dubbo服务上传文件 dubbo服务发布_service_06

属性

作用

默认值

描述

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示例

dubbo服务上传文件 dubbo服务发布_service_07


dubbo服务上传文件 dubbo服务发布_service_08


远程服务调用前执行。参数可以为true/false打开关闭,亦或是直接写调用前执行类。当使用boolean变量时默认类名为接口名+Stub,寻找类包路径与接口一致。该类必须提供参数为接口类型的有参构造函数

3.3.2 mock示例

dubbo服务上传文件 dubbo服务发布_ide_09


dubbo服务上传文件 dubbo服务发布_默认值_10


远程服务调用失败后执行。参数与stub一致,使用boolean时默认类名为接口名+Mock,寻找类包路径与接口一致

3.4 性能调优

服务消费的性能调优更多的是倾向于消费调用层面,对响应时间、尝试次数、延迟初始化等方面实现

属性

作用

默认值

描述

timeout

远程调用超时时长

缺省使用<dubbo:consumer>的timeout

服务方法调用超时时间(毫秒)

retries

远程调用重试次数

2

不包括第一次调用

filter

拦截器

default

服务消费方远程调用过程拦截器名称,多个名称用逗号分隔

listener

监听器

default

服务消费方引用服务监听器名称,多个名称用逗号分隔

init

是否延迟加载

false

是否在afterPropertiesSet()时饥饿初始化引用,否则等到有人注入或引用该实例时再初始化