目录
一.说明
本文是基于上篇文章进行的配置实现(SpringCloudAlibaba学习系列(2)dubbo集成),所以这里就不继续重复去搭建项目,只做一些代码配置验证。
将会列举目前学习到的一些dubbo的配置,做下记录,方便以后进行查询使用。后续如果有看到其他配置,将会继续进行更新。
二.常用配置
1.1、version
用于设置provider的service接口版本号,consumer要保持一致
1.2、group
服务分组,当一个接口有多个实现,可以采用分组来区分配置类,provider和consumer配置要一致
1.3、interfaceClass
用于提供者provider的DubboService中设置暴露的接口类
1.4、check
用于消费者consumer的DubboRefrence设置服务启动的时候是否检查服务提供者provider的接口是否正常,true代表检查,false代表不检查。
常用配置的例子如下:
提供者provider的配置例子:
@DubboService(version = "1.0.0", group = "magic", interfaceClass = MagicProviderFacade.class)
public class MagicProviderFacadeImpl implements MagicProviderFacade {
...
}
消费者consumer的配置例子:
@DubboReference(version = "1.0.0", check = false, group = "magic")
private MagicProviderFacade magicProviderFacade;
三、服务治理配置
3.1、token
token作为消费者调用提供者接口的安全保证,可以防止消费者不是通过注册中心获取注册的提供者服务接口,直接绕过访问提供者接口,实现授权模式。
token可以进行providers全局配置,也可以对单个service接口进行单独配置token。
token默认为空,表示不启用校验;设置为true,表示自动随机生成一个UUID作为值;设置为固定值,如“123456”,就会直接使用。
provider全局配置,在bootstrap.properties中加入:
# 不启用
dubbo.provider.token=
# 随机UUID
# dubbo.provider.token=true
# 固定值
# dubbo.provider.token=1234567890
dubboService注解接口单独配置:
@DubboService(version = "1.0.0", group = "magic", interfaceClass = MagicProviderFacade.class, token = "abcd")
public class MagicProviderFacadeImpl implements MagicProviderFacade {
...
}
提供者将token发布到注册中心中,消费者consumer从注册中心获取到token值,保存到本地,每次访问提供者接口时,都需要带上token,提供者在接收到请求后,会使用过滤器TokenFilter进行token校验。
3.2、stub
消费者consumer在调用提供者provider接口时,如果想嵌入自己的一个代码执行,就可以采用stub的方式,使用的是代理的模式。
如这里有一个dubboService提供的接口MagicProviderFacade,在消费者中可以实现一个stub类MagicProviderFacadeStub:
package com.sam.cloud.consumer.dubbo.stub;
import com.sam.cloud.provider.api.domain.UserDTO;
import com.sam.cloud.provider.api.facade.MagicProviderFacade;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MagicProviderFacadeStub implements MagicProviderFacade {
private static Logger LOG = LoggerFactory.getLogger(MagicProviderFacadeStub.class);
//必须定义这个接口参数,用于服务代理类的赋值
private MagicProviderFacade magicProviderFacade;
public MagicProviderFacadeStub(MagicProviderFacade magicProviderFacade) {
this.magicProviderFacade = magicProviderFacade;
}
@Override
public UserDTO queryUser(String name) {
LOG.info("i am proxy MagicProviderFacade, name={}", name);
return this.magicProviderFacade.queryUser(name);
}
}
消费者在引入接口的dubboReference注解中配置stub为上面的类:
@DubboReference(version = "1.0.0", check = false, group = "magic",
stub="com.sam.cloud.consumer.dubbo.stub.MagicProviderFacadeStub")
private MagicProviderFacade magicProviderFacade;
3.3、mock
类似于mock测试的作用,消费者consumer在调用提供者provider接口时,如果provider接口调用时报RpcException,可以使用mock方式自动进行处理,返回设定的响应,用于DubboReference注解配置上。
首先消费者创建一个mock实现类:
package com.sam.cloud.consumer.dubbo.mock;
import com.sam.cloud.provider.api.domain.UserDTO;
import com.sam.cloud.provider.api.facade.MagicProviderFacade;
public class MagicProviderFacadeMock implements MagicProviderFacade {
@Override
public UserDTO queryUser(String name) {
UserDTO user = new UserDTO();
user.setUserId(0);
user.setName("mock");
user.setAge(1L);
return user;
}
}
消费者DubboReference注解中配置mock类:
@DubboReference(version = "1.0.0", check = false, group = "magic",
mock = "com.sam.cloud.consumer.dubbo.mock.MagicProviderFacadeMock"
)
private MagicProviderFacade magicProviderFacade;
- 如果设置为mock="true",会自动查找跟接口同目录下的"接口+Mock"名称的实现类,当服务调用失败时,会调用这个类的接口方法;
- 如果设置为mock="false"或者"default",代表不调用mock服务,即使调用服务失败;
- 如果设置为mock="force",代表不管服务能否调用成功,都强制使用Mock服务;
- 如果是mock="force:类名"或"return+null",则表明是强制Mock,强制Mock会让消费者对该服务的调用直接返回null,不再发起远程调用;
- 如果是mock="fail:类名"或"return+null",代表消费者还会发起远程调用,不过失败后会调用mock,但是不抛出异常;
- 如果是mock="com.xxx.xxx",代表使用这个实现类做mock;
- 如果是mock="return null",代表返回空;
四、调优配置
4.1、timeout
服务接口处理超时时间,可以配置在消费者中,也可以配置在提供者中,生效的优先级如下:
DubboReference > consumer > DubboService > provider
4.2、loadbalance
接口的负载均衡策略设置,可以设置三种:random、roundrobin、leastactive,分别表示:随机、轮循、最少活跃调用,默认是random;可以配置在消费者中,也可以配置在提供者中,生效的优先级如下:
DubboReference > consumer > DubboService > provider
4.3、retries
接口的调用的重试次数设置,0表示不进行重试,重试次数不包括第一次请求;可以配置在消费者中,也可以配置在提供者中,生效的优先级如下:
DubboReference > consumer > DubboService > provider
4.4、cluster
集群模式设置,值的设置如下:
- failover:请求失败后,自动请求其他服务提供者,配合retries设置重试次数,可用于读取数据接口。
- failfast: 请求失败后,直接报错,可用于新增、修改、删除等操作接口。
- failsafe: 请求失败后,记录异常,但忽略错误,可用于日志记录接口。
- failback: 请求失败后,定时重新发送,可用于消息接口。
- forking: 同时请求制定数量的服务提供接口,只需要一个服务返回成功,就请求成功,配合forks来设置请求的服务数量。
可以配置在消费者中,也可以配置在提供者中,生效的优先级如下:
DubboReference > consumer > DubboService > provider
4.5、threadpool
服务提供者线程池类型,可这是fixed和cached两种;
4.6、threads
服务提供者线程池大小;