1.配置中心
配置中心提供了动态配置功能,是 Dubbo2.7 版本引入的一个新的功能。
- 简单来说,就是把 dubbo.properties 中的属性进行集中式存储,存储在其他的服务器上。
- 目前 Dubbo 能支持的配置中心有:apollo、nacos、zookeeper
其实,从另外一个角度来看,我们之前用 zookeeper 实现服务注册和发现,本质上就是使用 zookeeper 实现了配置中心,这个配置中心只是维护了服务注册和服务感知的功能。在 2.7 版本中 Dubbo 对配置中心做了延展,出了服务注册之外,还可以把其他的数据存储在 zookeeper 上,从而更好的进行维护。
1.在 dubboadmin 添加配置
应用名称可以是 global,或者对应当前服务的应用名
- 如果是 global 表示全局配置, 针对所有应用可见配置的内容
- 如果是应用名,则只针对某一服务
PS:实际就是 dubbo.properties 中配置的基本信息。只是同意存储在了 zookeeper上
2.本地的配置文件添加配置中心
在 application.properties 中添加配置中心的配置项
dubbo.config-center.address=zookeeper://43.107.136.120:2181
dubbo.config-center.app-name=spring-boot-provider # 要与application.name相同
注:为了可靠性(配置中心挂了还要配置),存在于配置中心上的配置项本地仍然需要配置一份。所以下面这些配置一定要加上。否则启动不了。
dubbo.application.name=spring-boot-provider
dubbo.registry.address=zookeeper://43.107.136.120:2181
dubbo.scan.base-packages=com.xupt.yzh.dubboclient
3.配置的优先级
引入配置中心后,两份配置的优先级就需要关注了
- 默认情况下,外部配置的优先级最高, 也就是配置中心上的配置会覆盖本地的配置
- 当然也可以调整优先级 dubbo.config-center.highest-priority=false
配置中心原理
默认所有的配置都存储在/dubbo/config节点,具体节点结构图如下。
- namespace:用于不同配置的环境隔离
- config:Dubbo 约定的固定节点,不可更改,所有配置和服务治理规则都存储在此节点下
- dubbo/application:全局配置(dubbo是默认group值)、应用级别配置(application对应应用名)
- dubbo.properties:此节点的 node value 存储具体配置内容
2.元数据中心
在 Dubbo2.7 之前,所有的配置信息,比如服务接口名称、重试次数、版本号、负载策略、容错策略等等,所有参数都是基于 url 形式配置在 zookeeper 上的。这种方式会造成一些问题 :
- url 内容过多,导致数据存储空间增大 ,而注册中心(zookeeper等)的内存空间是有限的
- url 需要涉及到网络传输,数据量过大会造成网络传输过慢
- 网络传输慢,会造成服务地址感知的延迟变大,影响服务的正常响应
服务提供者这边的配置参数有30多个,有一半是不需要作为注册中心进行存储的。而消费者这边可配置的参数有 25 个以上,只有个别是需要传递到注册中心的。所以,在 Dubbo2.7 中对元数据进行了改造,简单来说:
- 把属于服务治理的数据发布到注册中心
- 其他的配置数据统一发布到元数据中心。这样一来大大降低了注册中心的负载。
元数据中心配置
元数据中心目前支持 redis 和 zookeeper。官方推荐是采用 redis,因为 redis 本身对于非结构化存储的数据读写性能比较高。当然,也可以使用 zookeeper 来实现。
在配置文件中添加元数据中心的地址:
dubbo.metadata-report.address=zookeeper://43.107.136.120::2181
dubbo.registry.simplified=true #注册到注册中心的URL是否采用精简模式的 (与低版本兼容)