您的位置:首页 > 其它

自建配置中心加持需求及解决思路

2017-12-26 15:10 309 查看
摘要: 配置中心

接上篇:https://my.oschina.net/u/3345762/blog/913605

上周自建的配置中心已推广至7个项目组中,其中已有2个项目应用至其生产环境,迎来了第一批内部客户,在使用的过程中还是出现了很多我们设计时没有预期到的问题或需求,下面进行简单梳理并给出解决问题的思路。说明:下文中的diamond(呆萌)为配置中心的简称,profile为应用机器环境,module为平行于profile的应用模块,直观点可以理解为各配置文件。

1、工程引入Java版diamond client后,将应用配置交由配置中心进行统一管理,工程在启动后发现spring mvc中的配置存在未被引入的情况,于是便将问题丢给了我们。

原因:排查了解后发现,这是由于spring及spring mvc之间的伪共享造成,spring mvc并不能直接使用spring容器中的properties,spring及spring mvc之前存在类似继承的关系,spring mvc可以使用spring中定义的bean,相反则不行。

解决方案:基于上述思路,我们可以将Properties在spring定义为一个Bean,然后在spring mvc文件中进行引用。给出client端中的该部分的使用文档。

创建spring bean:

<bean id="propertyConfigurer" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="properties" ref="properties"/>
</bean>

<bean id="properties" class="java.util.Properties">
<constructor-arg ref="propertiesConfiguration"/>
</bean>
<bean id="propertiesConfiguration" class="com.best.diamond.client.PropertiesConfigurationFactoryBean">
<property name="configurationListener" ref="defaultConfigurationListener"/>
</bean>

<bean id="defaultConfigurationListener" class="com.best.diamond.client.event.listener.DefaultConfigurationListener"/>

spring mvc中引入:

<bean id="propertyConfigurer"  class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="properties" ref="properties"/>
</bean>

2、client端同时兼容多种获取基础配置方式。

原则:client端暴露出现的基本使用配置不能太多,同时需支持properties文件形式、支持系统环境中设置配置变量形式,支持xml文件配置形式。

该需求相对容易解决,最终确定用户至少配置diamond.env(配置中心环境)和profile(机器环境),同时支持用户在client端配置ip和profile的映射关系,各配置方式的优先级分别为xml > properties > server端配置。

3、公共基础配置的抽离。

分为项目之间公共配置(主要是各中间件的配置),项目内部的公共配置抽离(不依赖项目的profile)

解决方案:针对第一种,将中间件的配置单独抽离,并以project的维度进行管理,每一个中间件可作为一个project,外部的项目可以引用中间件项目(为确保安全,需要中间件项目的所有者授权),具体执行方式为,在用户创建应用级别的project时,将diamond中已有的中间件peoject陈列出,用户可以选择引用,若用户选择引用某一中间件配置则需另外维护本项目中的peofile和被引用的中间件project的profile对应关系(不然diamond server无法判断client需要哪一环境的配置)。中间件项目被引用后,并不能立即生效,需要该中间件project的admin或者授权用户进行授权后方可使用。

针对第二种需求,可以给module(可以理解为不同的配置文件)进行归类,分为公共使用类别、一般类别,diamond server端在获取某一工程的配置时根据module的类别进行相应的逻辑判断、处理,最终获取到client端所需的配置。

4、开关类的控制配置

将不同工程的开关配置进行统一抽出管理单独授权,具体的使用方式和应用配置相同。

在机场候机写的,有点水~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  配置中心 diamond