zoukankan      html  css  js  c++  java
  • SpringCloud config分布式配置中心

    分布式系统面临的配置问题

    springcloud听过的config可以完美的解决上述的问题,springcloud config是什么

     是什么

     怎么玩‘

     

     

     能干嘛

    集中管理配置文件

    不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release

    运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息

    当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置

    将配置信息以REST接口的形式暴露

    与Github整合配置

    由于SpringCloud Config默认使用Git来存储配置文件(也有其它方式,比如支持svn和本地文件,但最推荐的还是Git,而且使用的是http/https访问的形式)

    Config服务端配置与测试

    在自己的github创建一个仓库,并在本地下载

     这些前提条件搞好了之后创建cloud-config-center-3344服务端

     pom文件引入依赖

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>springcloud</artifactId>
            <groupId>org.example</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>cloud-config-center-3344</artifactId>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.example</groupId>
                <artifactId>cloud-api-conmmon</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
    
            <!--springcloud-config-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-config-server</artifactId>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
    
            <!--SpringBoot热部署配置 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <fork>true</fork>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    
    </project>
    

     application.yml

    server:
      port: 3344
    spring:
      application:
        name: cloud-config-center
      cloud:
        config:
          server:
            git:
              uri: https://github.com/changtoufadeguniang/springcloud-config
              search-paths:
                - springcloud-config
          label: main
    eureka:
      client:
        service-url:
          defaultZone:  http://localhost:7001/eureka
    

      启动类

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

     测试http://localhost:3344/main/application-dev.yml

    Config客户端配置与测试  创建cloud-config-client-3355客户端

       pom

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>springcloud</artifactId>
            <groupId>org.example</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>cloud-config-client-3355</artifactId>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.example</groupId>
                <artifactId>cloud-api-conmmon</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
    
            <!--springcloud-config-client-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
    
            <!--SpringBoot热部署配置 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <fork>true</fork>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

     bootstrap.yml

    server:
      port: 3355
    spring:
      application:
        name: config-client
      cloud:
        config:
          label: main
          name: application
          profile: dev
          uri: http://localhost:3344
    eureka:
      client:
        service-url:
          defaultZone:  http://localhost:7001/eureka
    启动类
    @SpringBootApplication
    @EnableEurekaClient
    public class ConfigClientApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConfigClientApplication.class,args);
        }
    }
    

      编写controller获取github application-dev.yml的内容

    @RestController
    @RequestMapping("/client")
    public class ConfigClientController {
    
    
        @Value("${config.info}")
        private String configInfo;
    
        @GetMapping("/getConfigInfo")
        public String getConfigInfo(){
            return configInfo;
        }
    }
    

      测试http://localhost:3355/client/getConfigInfo

    发现问题,当github 上application-dev.yml的内容发生改变后,在不重启服务的情况下,服务端3344内容可以实时更新,但是3355获得的内容没有发生改变。只有重启3355客户端才会刷新改变

    Config客户端之动态刷新

    cloud-config-client-3355客户端

    pom文件加入依赖

      <!--config客户端动态刷新需要引入的-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
    

     修改bootstrap.yml配置文件暴露端口

    server:
      port: 3355
    spring:
      application:
        name: config-client
      cloud:
        config:
          label: main
          name: application
          profile: dev
          uri: http://localhost:3344
    eureka:
      client:
        service-url:
          defaultZone:  http://localhost:7001/eureka
    #暴露端口
    management:
      endpoints:
        web:
          exposure:
            include: "*"
    

      controller添加注解@RefreshScope

    @RestController
    @RequestMapping("/client")
    @RefreshScope
    public class ConfigClientController {
    
    
        @Value("${config.info}")
        private String configInfo;
    
        @GetMapping("/getConfigInfo")
        public String getConfigInfo(){
            return configInfo;
        }
    }
    

      一切搞好之后重启服务,然后修改github上配置文件的内容,在访问http://localhost:3355/client/getConfigInfo内容还是没有更新

    这时需要先发送一次post请求,http://localhost:3355/actuator/refresh刷新一下服务

     再次请求

     内容已经发生了改变

    小蘑菇
  • 相关阅读:
    特殊方法(双下方法)
    反射
    属性
    类方法、静态方法
    封装
    python接口类,抽象类
    Yii2基本概念之——事件(Event)
    Yii2基本概念之——行为(Behavior)
    yii2 migrate 数据库迁移的简单分享
    Yii2.0 RESTful API 之速率限制
  • 原文地址:https://www.cnblogs.com/wang66a/p/13883361.html
Copyright © 2011-2022 走看看