某宝配置中心diamond的改版

目标

源码待后续整理后加入github

首要的目标是统一,diamond采用的是gbk编码,这与其他系统的编码格式utf-8的编码风格不协调。

再有,diamond自身内置功能很丰富,目前未能很好把它作为配置中心的角色发挥出来。

改版将对系统中的环境配置类信息等要求统一放置于diamond中,强化diamond作为配置中心的地位。

通过diamond的改版,对diamond的实现机制,以及将来可能存在的多机房情况下,如何使用diamond

有了清晰的认识。

diamond-client

功能修改

client改版主要集中于以下几个方面,此处描述的功能改动是从影响使用方的角度列出的,自身的改动未涉及。

  1. 去掉了log4j的引入,改为slf4j,避免jar污染;
  2. 重写diamond的加载方式,使其可以指定server地址,也可使用默认地址;
  3. 将内部域名jmevn.tbsite.net的内置域名修改为diamond.****.net;
  4. 整体改变UTF-8编码,因此无法适用于老diamond-server;
  5. 加入了DiamondProperties类,用于业务系统的配置信息外部存放;

使用

<bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    <property name="ignoreResourceNotFound" value="true" />
    <property name="properties" ref="diamondProperties" />
    <property name="locations">
        <list>
            <value>classpath:config.properties</value>
        </list>
    </property>
</bean>
 
<bean id="diamondProperties" class="com.le.diamond.spring.DiamondProperties"
    init-method="init">
    <property name="dataIds">
        <list>
            <value>common.zookeeper</value>
            <value>common.redis</value>
        </list>
    </property>
</bean>
说明

说明:

dataIds是需要加载的在diamond配置的dataId(组名固定为environment),鉴于目的的不同,采取多个dataId存放。

diamondProperties默认获取的组为environment,dataId为common,如果未设置将使用以上组进行获取值。

如果没有需要从diamond中获取的占位符的配置信息,不需要配置

以上配置是以本地配置为主,diamond配置为次,如果需要以diamond为主配置,需要增加以下内容:

覆盖本地配置
<property name="localOverride" value="true" />
不同优先级的加载方式

1.第一种

<!-- 引入配置文件 -->
<bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    <property name="ignoreResourceNotFound" value="true" />
    <property name="properties" ref="diamondProperties" />
    <property name="locations">
        <list>
            <value>classpath:config.properties</value>
        </list>
    </property>
</bean>
<bean id="diamondProperties" class="com.le.diamond.spring.DiamondProperties"
    init-method="init">
    <!-- 默认组 environment 不使用可以不要 -->
    <property name="dataIds">
        <list>
            <value>common.zookeeper</value>
            <value>common.redis</value>
        </list>
    </property>
    <!-- order 优先级,数字越大优先级越高 -->
    <property name="diamondFlags">
        <util:list>
            <bean class="com.le.diamond.spring.DiamondFlag">
                <property name="dataIds">
                    <list>
                        <value>common.zookeeper</value>
                    </list>
                </property>
                <property name="group" value="foud"/>
                <property name="order" value="1"/>
            </bean>
            <bean class="com.le.diamond.spring.DiamondFlag">
                <property name="dataIds">
                    <list>
                        <value>test</value>
                    </list>
                </property>
                <property name="group" value="diamond"/>
                <property name="order" value="2"/>
            </bean>
        </util:list>
    </property>
</bean>

2.第二种

<bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
        <property name="ignoreResourceNotFound" value="true" />
        <property name="properties" ref="diamondProperties" />
        <property name="locations">
            <list>
                <value>classpath:config.properties</value>
            </list>
        </property>
    </bean>
<!-- 获取默认组 environment -->
<util:list id="dataIds" >
    <value>common.zookeeper</value>
    <value>common.rocketmq</value>
</util:list>
<!-- key为dataIds value为group 优先按照配置顺序  -->
<util:map id="customDataIds" map-class="java.util.LinkedHashMap">
    <entry key="common.zookeeper" value="environment"></entry>
    <entry key="test1" value="diamond"></entry>
</util:map>
<!-- 如果只用默认组environment,只需配置dataIds,否则需要配置customDataIds-->
<bean id="diamondProperties" class="com.le.diamond.spring.DiamondProperties"
      init-method="init">
    <property name="dataIds" ref="dataIds"></property>
    <property name="customDataIds" ref="customDataIds"></property>
</bean>

自定义域名

在一些场景下,频繁的变更host配置,令人头疼,加入了一项可以在配置中设定diamond服务器的方式,设定后,将不再使用diamond.ltsite.net的host配置。

<bean id="diamondProperties" class="com.le.diamond.spring.DiamondProperties" init-method="init">
    <property name="dataIds">
        <list>
            <value>common</value>
            <value>biz</value>
            <value>redis</value>
            <value>mq</value>
        </list>
        <property name="addr">
            <list>
                <value>10.75.248.117</value>
            </list>
        </property>
    </property>
</bean>

client准入机制

开启了client准入机制。

准入采用IP限制的方式,配置在dataId为com.le.diamond.meta.acl.trustips上,每行一个IP地址

diamond-server

授权登录

加入了用户登录功能,分角色授权,用户可以使用采用邮箱名及密码的登录方式进行登录。

性能统计

性能统计,展示了diamond-client每次拉取数据的耗时情况,可以监控系统的性能。
在这里插入图片描述

订阅关系展示

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值