SpringCloudAlibaba学习系列(2.2)dubbo配置详解

目录

一.说明

二.常用配置

三、服务治理配置

四、调优配置


一.说明

        本文是基于上篇文章进行的配置实现(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

       服务提供者线程池大小;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值