美文网首页SpringCloud学习
SpringCloud之统一配置中心

SpringCloud之统一配置中心

作者: FlyXhc | 来源:发表于2018-05-29 23:08 被阅读29次

    Spring Cloud Config是Spring Cloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密/解密信息等访问接口;而客户端则是微服务架构中的各个微服务应用或基础设施,它们通过指定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。Spring Cloud Config实现了对服务端和客户端中环境变量和属性配置的抽象映射,所以它除了适用于Spring构建的应用程序之外,也可以在任何其他语言运行的应用程序中使用。由于Spring Cloud Config实现的配置中心默认采用Git来存储配置信息,所以使用Spring Cloud Config构建的配置服务器,天然就支持对微服务应用配置信息的版本管理,并且可以通过Git客户端工具来方便的管理和访问配置内容。当然它也提供了对其他存储方式的支持,比如:SVN仓库、本地化文件系统。

    在本文中,我们将学习如何构建一个基于Git存储的分布式配置中心,并对服务进行改造,并让其能够从配置中心获取配置信息并绑定到代码中的整个过程。

    配置仓库

    在码云或github上创建一个仓库,我这里是在码云创建的,地址为
    http://git.oschina.net/swlfly/config-repo-demo/

    新建一个配置文件client2.yml,将client-two的配置内容复制过来

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka #注册服务器地址
      instance:
        hostname: client2
    spring:
      application:
        name: client2
    server:
      port: 8081 
    

    创建服务

    IDEA新建一个config服务,使用注解@EnableConfigServer开启一个配置中心

    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableConfigServer
    public class ConfigApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ConfigApplication.class, args);
        }
    }
    

    配置文件如下

    spring:
      application:
        name: config
      cloud:
        config:
          server:
            git:
              uri: http://git.oschina.net/swlfly/config-repo-demo/
              username: xxxxx  # git用户名
              password: xxxx   #git密码
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka
    server:
      port: 8082 #端口号
    

    需要认证的时候username和password分别输入git的用户名和密码,启动服务,访问localhost:8082/client-a.yml,返回的内容如下

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka
      instance:
        hostname: client2
    server:
      port: 8081
    spring:
      application:
        name: client2
    

    从IDEA的控制台输出可以看到有多种Mapped,如

    {name}-{profiles}.yml
    {label}/{name}-{profiles}.yml
    

    这里name代表服务名,我们这里就是client2,profiles代表环境如dev,test,prod,label代表分支,默认为master,如访问http://localhost:8082/master/client2-a.yml在这里实际和访问localhost:8082/client-a.yml返回的内容一样,接下来我们在config-repo-demo创建一个client2-dev.yml和client2-test.yml来验证profiles
    client2-dev.yml内容如下:

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka #注册服务器地址
      instance:
        hostname: client2
    spring:
      application:
        name: client2
    server:
      port: 8081
    env: dev    
    

    client2-test.yml内容如下

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka #注册服务器地址
      instance:
        hostname: client2
    spring:
      application:
        name: client2
    server:
      port: 8081
    env: test
    

    访问http://localhost:8082/master/client2-dev.yml返回的内容为

    env: dev
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka
      instance:
        hostname: client2
    server:
      port: 8081
    spring:
      application:
        name: client2
    

    访问http://localhost:8082/master/client2-test.yml返回的内容为

    env: test
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka
      instance:
        hostname: client2
    server:
      port: 8081
    spring:
      application:
        name: client2
    

    在config-repo-demo创建一个分支来验证label,创建分支release


    image.png

    修改分支release里的client2-dev内容如下

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka #注册服务器地址
      instance:
        hostname: client2
    spring:
      application:
        name: client2
    server:
      port: 8081
    env: dev
    label: release   
    

    访问http://localhost:8082/release/client2-dev.yml返回如下内容

    env: dev
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka
      instance:
        hostname: client2
    label: release
    server:
      port: 8081
    spring:
      application:
        name: client2
    

    源码地址: https://gitee.com/swlfly/SpringCloud_Learn/tree/1.5

    更多技术文章可关注个人公众号: 码农Fly

    公众号二维码: qrcode_for_gh_3d746d8ff050_258 (1).jpg

    相关文章

      网友评论

        本文标题:SpringCloud之统一配置中心

        本文链接:https://www.haomeiwen.com/subject/dkjzjftx.html