动态配置中心-diamond,淘宝的diamond的改版使用

22 篇文章 0 订阅

最近在做springcloud的集群构建,在业务代码层,遇到了动态配置,当然可以采用springcloud的config的配置中心,但是感觉这个配置在使用上极度不爽,因为我不仅仅要构建一版开发环境的,还需要我手动的将配置文件上传到生产内网去,这都是次要的,动态加载,总感觉不是很爽。

所以在网上寻找动态配置中心,单纯的做业务方面的配置,而且还得必须高效可用,所以找到了diamond,不过一开始采用淘宝版的,不过使用起来有点不爽,就找到了git上大神开源的项目。

diamond的改进版:

git地址:https://github.com/bingoohuang/diamond-miner

下载源码,解压开后:

首先先构建配置服务中心

进入到 diamond-miner-master\diamond-server 改目录下

进行maven打包

mvn clean

mvn package

打包完事后,可以在target下找到war包,这个就是源码处理后的,因为diamond的持久化是数据库,所以可以自定义数据源。我这边采用的mysql

同级目录下放数据源配置文件,文件内容可以参考git上的示例:

随后就可以启动war包,可以采用命令启动:

java -jar diamond-server-0.0.8-exec.war -httpPort 17002

启动完成后,直接访问:

http://127.0.0.1:17002/diamond-server

账号密码都是admin/admin

登录进去后就是一个空的配置中心

左侧菜单:

主要关心的配置中心即可

New Config   新加配置

Upload Config 更新配置

query查询所有,fuzzyquery模糊查

我为了方便测试,初始化了几条配置

group 组

dataId 数据ID

content 配置内容 遵循properties方式 xxxx=xxxx  注释的话可以在desc加也可以用#标注

配置服务中心就建立好了,高可用文章最后会说明的

 

现在开始实际代码使用,我实际的工程采用的springboot开发的,所以,不会的小伙伴建议学习下,毕竟现在基本的都是spirngboot了,springmvc的也是一样的方式,

<!-- https://mvnrepository.com/artifact/com.github.bingoohuang/diamond-client -->
        <dependency>
            <groupId>com.github.bingoohuang</groupId>
            <artifactId>diamond-client</artifactId>
            <version>0.0.21</version>
            <exclusions>
                <exclusion>
                    <groupId>com.alibaba</groupId>
                    <artifactId>fastjson</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

首先引入pom,排除这个fastjson是因为我工程引入了,所以排除了,这个可以自由把握。

resources目录下建立配置文件,  名称为:  diamond-client.properties

内容如下:

DiamondServer.address=127.0.0.1:17002

这个也是可以采用pom文件打包分环境的方式采取,比如:

pom文件下:

<profiles>
        <profile>
            <id>dev</id>
            <properties>
                <env>dev</env>
                <eureka-url>http://127.0.0.1:9010/eureka/</eureka-url>
                <diamond-url>127.0.0.1:17002</diamond-url>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <env>test</env>
                <eureka-url>http://127.0.0.1:9010/eureka/</eureka-url>
                <diamond-url>127.0.0.1:17002</diamond-url>
            </properties>
        </profile>
        <profile>
            <id>pro</id>
            <properties>
                <env>pro</env>
                <eureka-url>http://127.0.0.1:9010/eureka/</eureka-url>
                <diamond-url>127.0.0.1:17002</diamond-url>
            </properties>
        </profile>
    </profiles>

配置文件内容:

DiamondServer.address=@diamond-url@

这样的话也是可以的,如果不懂pom分环境打包的话,建议自学,这个是一个maven常用的技能。

简单的写了一个controller的测试验证类:

package com.zh.controller.diamond;

import com.alibaba.fastjson.JSONObject;
import com.zh.common.model.Result;
import lombok.extern.slf4j.Slf4j;
import org.n3r.diamond.client.Miner;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author Lu code people
 * @Date 2019/9/4 15:26
 * @Desc v
 **/
@Slf4j
@RestController
@RequestMapping(value = "/diamond")
public class DiamondController {

    @GetMapping(value = "/get")
    public Result getDiamond() {
        JSONObject data = new JSONObject();
        // 获取默认分组下的dataId为demo的content中的配置,
        /**
         *              key         如果没有对应的key会返回改默认值,也可以不写
         * getString("demo.id", "no value")
         */
        data.put("demo.id", new Miner().getMiner("demo").getString("demo.id", "no value"));
        data.put("demo.name", new Miner().getMiner("demo").getString("demo.name"));

        JSONObject data2 = new JSONObject();
        // 获取指定分组user下的dataId为demo的下的content中的配置
        data2.put("user.swatch", new Miner().getMiner("user", "demo").getString("user.swatch", "no value"));
        data2.put("user.auth", new Miner().getMiner("user", "demo").getString("user.auth"));

        JSONObject res = new JSONObject();
        res.put("DEFAULT_GROUP", data);
        res.put("user", data2);

        // 获取指定分组user下的dataId为demo的conten的内容,所有的配置
        String stone = new Miner().getStone("user", "demo");
        log.info("指定分组user下的dataId为demo的conten的内容 : {}", stone);
        
        return Result.success(res);
    }

}

这样的话就可以获取到配置了。

 

上述基本完成了动态配置的搭建与使用,接下来说说其他特性。

首先,关闭你的配置中心服务,再次调用获取配置,发现是可以获取到的,是不是很意外,具体的可以参考下载下源码中心的那个ppt文件,要想直观的看得到的话,可以在自己本地电脑上的用户目录下发现有一份缓存文件

C:\Users\ThinkPad\.diamond-client

会在其中一个找打跟线上一样的配置,

当配置中心挂掉后,项目还是可以从本地获取到配置的,只不过这份配置不可以从配置服务中心进行同步了,不会影响到实际的使用,项目日志会不断刷连接配置中心超时,

这个配置中心建议只是使用在业务层面的配置,

至于更具体的原理什么的,建议看源码吧,毕竟个人也是懂了一个大致的,也经过实际测试后才选型改技术使用了。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值