spring-boot整合dubbo相关知识点补充
前言
昨天我们分享了spring-boot整合dubbo的相关内容,不过准确地说,应该是和spring整合,因为我们其实并没有用dubbo的starter,而是通过注解的方式把dubbo的相关配置注入到spring的ioc容器中。
这种方式只是省去了xml配置的繁琐配置,改成了注解的方式,本质上只能算web层面的集成,因为spring-boot的核心在stater,starter的核心在自动配置,关于定制自己的spring-starter我们前面有分享过,感兴趣的小伙伴可以去看下:
不过,这对不喜欢xml配置的小伙伴来说(我算其中有一个,当然xml有其优势),已经算福音了。好了,废话就说这么多,今天我们来对昨天的内容做一个简单的补充说明,由于昨天的内容过于繁杂,而且内容有点多,好多细节的知识点,没有在展开说明,下面我们就来对这些知识点做一个说明。
dubbo内容补充
配置
dubbo的配置主要有三部分,一部分是注册中心的相关配置,一部分是应用本身的配置,另外一部分是注册中心的配置。今天主要说明前两种配置,注册中心的配置暂时先不讲。
服务注册配置
服务注册的配置还是比较多的,下面是RegistryConfig的属性:
// 注册中心地址
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.zone-aware,根据流量的来源,特定类型的流量始终进入一个注册表。
*/
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;
/**
* 是否为默认注册中心
*/
private Boolean isDefault;
/**
* 简化注册。对提供者和使用者都很有用
*
* @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;
以上配置只有address和client是必须配置的,其余的都是可以不配置的,下面我们选一些常用的属性简单介绍下:
address:注册中心地址,以zk为例的话,就是:zookeeper://127.0.0.1:2181;client:客户端类型,对2.7.1之后的版本,如果注册中心是zkd的话,只能是curatorusername和password:这个应该不用解释了,zk应该不用配置这个port:这个端口,目前没发现有啥用,毕竟地址里面已经包含端口了protocol:注册中心支持的协议类型,我发现dubbo支持的类型还挺多的,包括dubbo、rest、http、redis等,具体大家可以看下图:
transporter:网络传输协议也比较多,默认应该是netty,因为dubbo默认引入了netty的包

group:注册的服务默认情况下(不指定group)所属服务组。通常我们在注册服务的时候,会指定服务所属服务组,如果你不指定所属服务组,则会取当前设置的值,这个配置的默认值目前还没研究
version:这个配置和group类似,不过这个设定的是服务的版本,如果不指定就会取该值,这个值可以在服务注册时设定,但是设定的只是单个服务的版本
timeout:这个设置的是rpc请求的超时时间,也是个默认值,这个值可以在服务注册的时候指定,如果你不指定,就会取这个值
应用配置
/**
* 应用名称
*/
private String name;
/**
* 应用版本
*/
private String version;
/**
* 应用所属者
*/
private String owner;
/**
* 应用所属组织
*/
private String organization;
/**
* 应用架构
*/
private String architecture;
/**
* 环境 例如:dev 、test 或者 production
*/
private String environment;
/**
* Java 编译版本
*/
private String compiler;
/**
* 日志等级
*/
private String logger;
/**
* 注册中心列表
*/
private List<RegistryConfig> registries;
private String registryIds;
/**
* 监控中心
*/
private MonitorConfig monitor;
/**
* 是否为默认
*/
private Boolean isDefault;
/**
* thread dump保存地址
*/
private String dumpDirectory;
/**
* 是否启用qos
*/
private Boolean qosEnable;
/**
* qos监听主机地址
*/
private String qosHost;
/**
* qos监听端口
*/
private Integer qosPort;
/**
* 是否允许外网访问
*/
private Boolean qosAcceptForeignIp;
/**
* 自定义参数
*/
private Map<String, String> parameters;
/**
* 服务停止等待时间
*/
private String shutwait;
private String hostname;
/**
* 元数据类型:local 或者 remote, 如果选择remote, 还需要指定元数据中心
*/
private String metadataType;
private Boolean registerConsumer;
private String repository;
应用配置,只有name是必须的,其他都是非必须的。注释也很详细了,这里就不作过多说明了。
消费者配置
消费者的配置和提供者配置一样,所以这里我们就不再赘述。
注入配置
前天我们的演示实例中,我们是直接把配置项写死的,今天我们来看下如何通过配置文件设定我我们的配置。
首先,我们在spring-boot的appliaction.properties中加入dubbo的配置:
# dubbo应用配置
# dubbo应用名称
application.dubbo.application.name=dubbo-server
# dubbo注册配置
# dubbo注册中心地址
application.dubbo.registry.address=zookeeper://127.0.0.1:2181
# dubbo注册中心类型
application.dubbo.registry.client=curator
#application.dubbo.registry.username=dubbo
#application.dubbo.registry.password=dubbo
#application.dubbo.registry.port=20880
#application.dubbo.registry.protocol=20880
#application.dubbo.registry.transporter=20880
#application.dubbo.registry.cluster=20880d
#application.dubbo.registry.zone=20880d
#application.dubbo.registry.group=20880d
#application.dubbo.registry.version=1.0
#application.dubbo.registry.timeout=60000
#application.dubbo.registry.session=30000
#application.dubbo.registry.file=20880d
#application.dubbo.registry.wait=30000
#application.dubbo.registry.check=true
#application.dubbo.registry.dynamic=true
#application.dubbo.registry.register=true
#application.dubbo.registry.subscribe=true
#application.dubbo.registry.parameters.name=syske
#application.dubbo.registry.default=true
#application.dubbo.registry.simplified=true
#application.dubbo.registry.extraKeys=true
#application.dubbo.registry.useAsConfigCenter=true
#application.dubbo.registry.useAsMetadataCenter=true
#application.dubbo.registry.accepts=true
#application.dubbo.registry.preferred=true
#application.dubbo.registry.weight=10
然后在dubbo的配置类,加入如下代码:
@Bean
@ConfigurationProperties(ignoreUnknownFields = false, prefix = "application.dubbo.application")
public ApplicationConfig applicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
return applicationConfig;
}
@Bean
@ConfigurationProperties(ignoreUnknownFields = false, prefix = "application.dubbo.registry")
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
return registryConfig;
}
这里简单介绍下,@ConfigurationProperties注解可以和@Bean组合使用,这样在创建bean的时候,就可以把我们的配置文件直接注入到我们bean的属性中,确实也很方便。
需要注意的是,prefix的前缀必须与properties中的配置相对应,否则配置无法被注入。
另一个需要注意的是,如果配置项是isXXX,则需要确认isXXX的设置方法是否是setIsXXX,如果是,properties配置就可以写成isXXX,总之要和set方法一致,否则会报错:

注解
注解这块主要有两个注解注解比较重要,一个@DubboService,一个是@Reference。
DubboService
@DubboService注解是2.7.7引入的,其主要作用就是为了标记和配置服务提供者,它的前任是@Service,这个注解也算是个新人,它是2.7.0引入的,从注解属性上看,他们没有本质区别,@Service目前已经被弃用,我猜测弃用应该是注解名称太容易被混淆了,不利于服务代码开发维护,毕竟spring的原生注解也就@Service:

文档也说的很清楚,DubboService是Serivce的继任者。

DubboReference
@Reference注解也是dubbo 2.7.7引入的,主要是用来发现服务的,也就是标记服务消费者。这个注解的继任者是Reference,也是2.7.0引入的。


说明,在dubbo 2.7.0之前的版本是不支持注解式配置,而且我发现2.7.0以前的版本是属于com.alibaba这个groupId的,之后的版本是org.apache.dubbo这个groupId的,这是因为在2.7.0之后,阿里巴巴把dubbo捐献给apache基金会了,现在它是apache旗下的顶级项目之一。


总结
dubbo的知识点还是比较多的,算上今天我们补充的内容,我们目前已经分享的内容也只能算冰山一角的一角,但是到今天我们也算对dubbo有了一个最基本的认知了,从项目创建,到项目启动,再到项目配置,整个流程我们应该已经比较熟悉了,如果有小伙伴已经忘记了,可以回顾下之前的内容,至于其他更复杂的配置和高级用法,我们在后面的学习过程中,会继续分享,继续深挖。好了,今天的内容就到这里吧!
