04、Dubbo基础:Dubbo3.0配置类详解

AbstractConfig

Dubbo的核心配置类在dubbo-common中。
*
AbstractConfig是所有配置类的抽象父类,提供了用于解析配置的实用方法和公共方法。可以看到,它有很多实现子类,基本每个子类对应一项核心配置。
*

RegistryConfig

RegistryConfig就是注册中心相关的配置了,配置说明如下:

public class RegistryConfig extends AbstractConfig {
   
     

    public static final String NO_AVAILABLE = "N/A";
    private static final long serialVersionUID = 5508512956753757169L;

    /**
     * 注册中心地址
     */
    private String address;

    /**
     * 登录注册中心的用户名
     */
    private String username;

    /**
     * 登录注册中心密码
     */
    private String password;

    /**
     * 注册中心默认端口
     */
    private Integer port;

    /**
     * 注册中心协议
     */
    private String protocol;

    /**
     * 网络传输类型
     */
    private String transporter;

    private String server;

    private String client;

    /**
     * 影响流量在注册管理机构之间的分配方式,在订阅多个注册管理机构时很有用,可用选项:
     * 1. 区域感知,根据流量的来源,某种类型的流量总是进入一个注册管理
     */
    private String cluster;

    /**
     * 注册中心所属的区域,通常用于隔离流量
     */
    private String zone;

    /**
     * 服务注册表所在的组
     */
    private String group;

    private String version;

    /**
     * 以毫秒为单位的注册中心请求超时
     */
    private Integer timeout;

    /**
     * 注册中心的会话超时(以毫秒为单位)
     */
    private Integer session;

    /**
     * 注册中心动态列表保存文件
     */
    private String file;

    /**
     * 停止前等待时间
     */
    private Integer wait;

    /**
     * 开机时是否检查注册中心是否可用
     */
    private Boolean check;

    /**
     * 是否允许动态服务在注册中心注册
     */
    private Boolean dynamic;

    /**
     * 是否允许注册服务在注册中心
     */
    private Boolean register;

    /**
     * 是否允许订阅注册中心的服务
     */
    private Boolean subscribe;

    /**
     * 自定义参数
     */
    private Map<String, String> parameters;

    /**
     * 简化注册表。对提供者和使用者都很有用
     *
     * @since 2.7.0
     */
    private Boolean simplified;
    /**
     * 简化注册表后,应单独添加一些参数。只对服务提供者有效。
     * <p>
     * such as: extra-keys = A,b,c,d
     *
     * @since 2.7.0
     */
    private String extraKeys;

    /**
     * 该地址是否作为配置中心工作
     */
    private Boolean useAsConfigCenter;

    /**
     * 该地址是否用作远程元数据中心
     */
    private Boolean useAsMetadataCenter;

    /**
     * 此注册表接受的rpc协议列表,例如,“dubbo,rest”
     */
    private String accepts;

    /**
     * 如果设置为true,则始终首先使用此注册表,这在订阅多个注册表时非常有用
     */
    private Boolean preferred;

    /**
     * 注册表间的流量分布权重,在订阅多个注册表时非常有用
     * 仅在未指定首选注册表时生效。
     */
    private Integer weight;

    /**
     * 是否发布接口
     */
    private Boolean publishInterface;

    /**
     * 是否发布实例
     */
    private Boolean publishInstance;
}

ProtocolConfig

ProtocolConfig是服务提供者协议相关配置,说明如下:

public class ProtocolConfig extends AbstractConfig {
   
     

    private static final long serialVersionUID = 6913423882496634749L;

    /**
     * 协议名
     */
    private String name;

    /**
     * 服务ip地址(当有多个网卡可用时)
     */
    private String host;

    /**
     * 服务端口
     */
    private Integer port;

    /**
     * 上下文路径
     */
    private String contextpath;

    /**
     * 线程池
     */
    private String threadpool;

    /**
     * 线程池名
     */
    private String threadname;

    /**
     * Thread pool core thread size
     */
    private Integer corethreads;

    /**
     * 线程池核心线程大小
     */
    private Integer threads;

    /**
     * IO线程池大小(固定大小)
     */
    private Integer iothreads;

    /**
     * 线程池活动线程最大存活时间,单位毫秒
     */
    private Integer alive;

    /**
     * 线程池的队列长度
     */
    private Integer queues;

    /**
     * 最大可接受连接数
     */
    private Integer accepts;

    /**
     * 协议编解码器
     */
    private String codec;

    /**
     * 序列化
     */
    private String serialization;

    /**
     * 字符集
     */
    private String charset;

    /**
     * 有效载荷最大长度
     */
    private Integer payload;

    /**
     * 缓冲区大小
     */
    private Integer buffer;

    /**
     * 心跳间隔
     */
    private Integer heartbeat;

    /**
     * 访问日志
     */
    private String accesslog;

    /**
     * Transporter
     */
    private String transporter;

    /**
     * 如何交换信息
     */
    private String exchanger;

    /**
     * 线程调度模式
     */
    private String dispatcher;

    /**
     * 网卡
     */
    private String networker;

    /**
     * Sever impl
     */
    private String server;

    /**
     * Client impl
     */
    private String client;

    /**
     * 支持的telnet命令,用逗号分隔。
     */
    private String telnet;

    /**
     * 命令行提示符
     */
    private String prompt;

    /**
     * 状态检查
     */
    private String status;

    /**
     * 是否注册
     */
    private Boolean register;

    /**
     * 是否为持久连接,将此添加到提供方
     */
    //TODO add this to provider config
    private Boolean keepAlive;

    // TODO add this to provider config
    private String optimizer;

    /**
     * 分机
     */
    private String extension;

    /**
     * 自定义参数
     */
    private Map<String, String> parameters;

    /**
     * 是否开启SSL
     */
    private Boolean sslEnabled;
}

MonitorConfig

MonitorConfig是dubbo管理控制台相关配置,说明如下:

public class MonitorConfig extends AbstractConfig {
   
     

    private static final long serialVersionUID = -1184681514659198203L;

    /**
     * 监视器的协议,如果值为注册表,它将从注册表中心搜索监视器地址,
     * 否则,它将直接连接到监控中心
     */
    private String protocol;

    /**
     * 控制台地址
     */
    private String address;

    /**
     * 控制台用户名
     */
    private String username;

    /**
     * 控制台密码
     */
    private String password;

    /**
     * 分组
     */
    private String group;

    /**
     * 版本
     */
    private String version;

    private String interval;

    /**
     * 自定义参数
     */
    private Map<String, String> parameters;
}

MetadataReportConfig

MetadataReportConfig是元数据中心相关配置,说明如下:

public class MetadataReportConfig extends AbstractConfig {
   
     

    private static final long serialVersionUID = 55233L;

    private String protocol;

    /**
     * 元数据中心地址
     */
    private String address;

    /**
     * 元数据中心默认端口
     */
    private Integer port;

    /**
     * 元数据中心用户名
     */
    private String username;

    /**
     * 元数据中心密码
     */
    private String password;

    /**
     * 元数据中心超时时间,毫秒
     */
    private Integer timeout;

    /**
     * 元数据中心分组,就像注册中心中的分组一样
     */
    private String group;

    /**
     * 自定义参数
     */
    private Map<String, String> parameters;

    /**
     * 重试次数
     */
    private Integer retryTimes;

    /**
     * 失败多久后重试
     */
    private Integer retryPeriod;
    /**
     * 默认情况下,元数据存储每天重复存储完整的元数据。
     */
    private Boolean cycleReport;

    /**
     * 同步报告,默认异步
     */
    private Boolean syncReport;

    /**
     * 是否集群
     */
    private Boolean cluster;

    /**
     * 注册ID
     */
    private String registry;

    /**
     * 用于保存元数据中心动态列表的文件
     */
    private String file;

    /**
     * 确定初始连接尝试失败时的行为,
     * “true”表示一旦失败就中断整个过程。默认值为true
     */
    private Boolean check;
}

ModuleConfig

ModuleConfig负责配置模块信息,说明如下:

public class ModuleConfig extends AbstractConfig {
   
     

    private static final long serialVersionUID = 5508512956753757169L;

    /**
     * 当前模块名称,用于注册中心计算模块间依赖关系
     */
    private String name;

    /**
     * 当前模块的版本
     */
    private String version;

    /**
     * 模块负责人,用于服务治理,请填写负责人公司邮箱前缀
     */
    private String owner;

    /**
     * 组织名称(BU或部门),用于注册中心区分服务来源,此配置项建议不要使用autoconfig,直接写死在配置中,比如china,intl,itu,crm,asc,dw,aliexpress等
     */
    private String organization;
}

ConfigCenterConfig

ConfigCenterConfig是配置中心配置类,说明如下:

public class ConfigCenterConfig extends AbstractConfig {
   
     
    private final AtomicBoolean initialized = new AtomicBoolean(false);

    /**
     * 用哪个配置中心:apollo、zookeeper、nacos等。zookeeper://127.0.0.1:2181
     */
    private String protocol;
    /**
     * 配置中心地址。取值参见protocol说明
     */
    private String address;
    private Integer port;

    /**
     * 含义视所选定的配置中心而不同。如Apollo中用来区分不同的配置集群
     */
    private String cluster;

    /**
     * 通常用于多租户隔离,实际含义视具体配置中心而不同。如:
     * zookeeper – 环境隔离,默认值dubbo;
     * apollo – 区分不同领域的配置集合,默认使用dubbo和application
     */
    private String namespace;

    /**
     * 含义视所选定的配置中心而不同。
     * nacos – 隔离不同配置集
     * zookeeper – 隔离不同配置集
     */
    private String group;
    /**
     * 如果配置中心需要做校验,用户名
     */
    private String username;
    /**
     * 如果配置中心需要做校验,密码
     */
    private String password;

    /**
     * 获取配置的超时时间
     */
    private Long timeout;

    /**
     * 来自配置中心的配置项具有最高优先级,即会覆盖本地配置项。默认true
     *
     * @deprecated no longer used
     */
    private Boolean highestPriority;

    /**
     * 当配置中心连接失败时,是否终止应用启动。
     */
    private Boolean check;

    /**
     * 全局级配置文件所映射到的key
     * zookeeper – 默认路径/dubbo/config/dubbo/dubbo.properties
     * apollo – dubbo namespace中的dubbo.properties键
     */
    private String configFile;

    /**
     * the properties file under 'configFile' is global shared while .properties under this one is limited only to this application
     */
    private String appConfigFile;
}

ApplicationConfig

应用信息配置。说明如下:

public class ApplicationConfig extends AbstractConfig {
   
     
    private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationConfig.class);

    private static final long serialVersionUID = 5508512956753757169L;

    /**
     * 当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样
     */
    private String name;

    /**
     * 当前应用的版本
     */
    private String version;

    /**
     * 应用负责人,用于服务治理,请填写负责人公司邮箱前缀
     */
    private String owner;

    /**
     * 组织名称(BU或部门),用于注册中心区分服务来源
     */
    private String organization;

    /**
     * 用于服务分层对应的架构。如,intl、china。不同的架构使用不同的分层。
     */
    private String architecture;

    /**
     * 应用环境,如:develop/test/product,不同环境使用不同的缺省值,以及作为只用于开发测试功能的限制条件
     */
    private String environment;

    /**
     * Java字节码编译器,用于动态类的生成,可选:jdk或javassist
     */
    private String compiler;

    /**
     * 日志输出方式,可选:slf4j,jcl,log4j,log4j2,jdk
     */
    private String logger;

    /**
     * 注册中心地址
     */
    private List<RegistryConfig> registries;
    private String registryIds;

    /**
     * Monitor中心地址
     */
    private MonitorConfig monitor;

    /**
     * 用于保存线程转储的目录
     */
    private String dumpDirectory;

    /**
     * 是否启用qos
     */
    private Boolean qosEnable;

    /**
     * 要侦听的qos主机
     */
    private String qosHost;

    /**
     * 要侦听的qos主机端口
     */
    private Integer qosPort;

    /**
     * 我们是否应该接受外国知识产权?
     */
    private Boolean qosAcceptForeignIp;

    /**
     * Customized parameters
     */
    private Map<String, String> parameters;

    /**
     * Config the shutdown.wait
     */
    private String shutwait;
}

ProviderConfig

服务提供者应用相关配置。说明如下:

public class ProviderConfig extends AbstractServiceConfig {
   
     

    private static final long serialVersionUID = 6913423882496634749L;

    // ======== protocol default values, it'll take effect when protocol's attributes are not set ========

    /**
     * 服务主机名,多网卡选择或指定VIP及域名时使用,为空则自动查找本机IP,建议不要配置,让Dubbo自动获取本机IP
     */
    private String host;

    /**
     * 服务端口
     */
    private Integer port;

    /**
     * 上下文路径
     */
    private String contextpath;

    /**
     * 线程池类型,可选:fixed/cached/limit(2.5.3以上)/eager(2.6.x以上)
     */
    private String threadpool;

    /**
     * Thread pool name
     */
    private String threadname;

    /**
     * 服务线程池大小(固定大小),默认200
     */
    private Integer threads;

    /**
     * IO thread pool size (fixed size)
     */
    private Integer iothreads;

    /**
     * Thread pool keepAliveTime, default unit TimeUnit.MILLISECONDS
     */
    private Integer alive;

    /**
     * Thread pool queue length
     */
    private Integer queues;

    /**
     * Max acceptable connections
     */
    private Integer accepts;

    /**
     * 协议编码方式,dubbo
     */
    private String codec;

    /**
     * 序列化编码,UTF-8
     */
    private String charset;

    /**
     * 请求及响应数据包大小限制,单位:字节,默认8388608(=8M)
     */
    private Integer payload;

    /**
     * 网络读写缓冲区大小
     */
    private Integer buffer;

    /**
     * Transporter
     */
    private String transporter;

    /**
     * How information gets exchanged
     */
    private String exchanger;

    /**
     * Thread dispatching mode
     */
    private String dispatcher;

    /**
     * Networker
     */
    private String networker;

    /**
     * 协议的服务器端实现类型,比如:dubbo协议的mina,netty等,http协议的jetty,servlet等
     */
    private String server;

    /**
     * 协议的客户端实现类型,比如:dubbo协议的mina,netty等
     */
    private String client;

    /**
     * 所支持的telnet命令,多个命令用逗号分隔
     */
    private String telnet;

    /**
     * Command line prompt
     */
    private String prompt;

    /**
     * Status check
     */
    private String status;

    /**
     * Wait time when stop
     */
    private Integer wait;

    /**
     * Thread num for asynchronous export pool size
     */
    private Integer exportThreadNum;

    /**
     * Whether export should run in background or not
     */
}

ConsumerConfig

服务消费者缺省值配置。说明如下:

    private String client;
    private String threadpool;
    private Integer corethreads;
    private Integer threads;
    private Integer queues;
    private Integer shareconnections;
    private String urlMergeProcessor;
    private Integer referThreadNum;
    private Boolean referBackground;
    // 启动时检查提供者是否存在,true报错,false忽略
    protected Boolean check;
    // 是否在afterPropertiesSet()时饥饿初始化引用,否则等到有人注入或引用该实例时再初始化
    protected Boolean init;
    // 是否缺省泛化接口,如果为泛化接口,将返回GenericService
    protected String generic;
    protected Boolean injvm;
    protected Boolean lazy;
    protected String reconnect;
    protected Boolean sticky;
    protected Boolean stubevent;
    protected String providedBy;
    protected String router;
    private Boolean referAsync;

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: