springcloud动态配置中心

记录一下springcloud动态配置中心的使用:
ConfigServer(配置中心服务端)从远端git拉取配置文件并在本地git一份,ConfigClient(配置中心客户端)从ConfigServer端获取自己对应 配置文件
当远端git仓库配置文件发生改变,Spring Cloud Bus会向外提供一个http接口:/bus/refresh。将这个接口配置到远程的git的webhook上,如:http://xx.xxx.xxx.xxx:8083/actuator/bus-refresh 当git上的文件内容发生变动时,就会自动调用接口类似回调通知。Bus就会通知config-server,config-server会发布更新消息到消息总线的消息队列中,其他服务订阅到该消息就会信息刷新,从而实现整个微服务进行自动刷新,文本介绍的是自己手动刷新,刷新ConfigServer,所有ConfigClient节都会刷新。
当然如果应用到生产环境,需要加密,本文暂不介绍。
为了达到高可用效果,所以向eureka中心注册成服务,
配置需要使用到的rabbitmq地址(自己安装)
配置git地址,私有库需要使用账号密码,共有库则不需要。
Git上有提前上传好的文本文件,目录如下:
SpringCloudDemo / respo /config-client-dev.properties
注意目录和文件名都是对应的
search-paths: respo,default-label: master如下面配置中的

ConfigServer项目:
application.yml内容如下:

server:
  port: 8083
spring:
  application:
    name: config-server
  rabbitmq:
      host: 20.122.222.222
      port: 5672
      username: admin
      password: xxxxx   
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/wg199063/SpringCloudDemo
          search-paths: respo
          username: xxxx账号密码使用自己的
          password: xxxxx
          default-label: master
    bus:
      trace:
        enabled: true
      enabled: true

eureka:
  client:
    serviceUrl:
      defaultZone: http://xxxxx:80/emeurekaserver/eureka/

management:
  endpoints:
    web:
      exposure:
        include: bus-refresh

pom.xml如下:

<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.cralor</groupId>
    <artifactId>config-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>config-server</name>
    <description>Demo project for Spring Boot</description>

   <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
    </properties>

    <dependencies>
    	<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
		<!-- <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency> -->
        <dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-bus</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
     <dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
    

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

application.java内容如下:

@EnableConfigServer
@EnableEurekaClient
@SpringBootApplication
public class ConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }

ConfigClient项目:
因为使用的是动态配置,有一些配置的加载需要在application.yml之前加载,负责会失败,所有创建一个bootstrap.yml
结构如下:
在这里插入图片描述
只有bootstrap文件有内容:

server:
  port: 8082
spring:
  application:
    name: config-client
  profiles:
    active: dev
  rabbitmq:
      host: xx.xx.xx.xxx
      port: 5672
      username: admin
      password: xxxx
  cloud:
    config:
      fail-fast: true
      discovery:
        enabled: true
        service-id: config-server

    bus:
      trace:
        enabled: true
      enabled: true
      
    

eureka:
  client:
    serviceUrl:
      defaultZone: http://xxxxx:80/emeurekaserver/eureka/

management:
  endpoints:
    web:
      exposure:
        include: bus-refresh
        

application内容如下:
在这里插入图片描述
controller内容如下:

@RefreshScope
@RestController
public class MyController {

    @Value("${foo}")
    String foo;

    @RequestMapping("/foo")
    public String hi(){
        return foo;
    }
}

```下面,打包好2个项目,并提前运行好eurekaServer项目。
依次启动ConfigServer和ConfigClient项目,先server再client。
rabbitmq中可以看到创建了queue:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019082719185666.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzMzM3OTI3,size_16,color_FFFFFF,t_70)

测试效果:
http://xx.xxx.xxx.xxx:8082/foo
返回结果
foo version 4

修改git中的foo version 4 为foo version 3.
刷新http://xx.xxx.xxx.xxx:8082/foo,还是4,此时需要模拟一个post请求:
http://xx.xxx.xxx.xxx:8083/actuator/bus-refresh
成功后再次刷新http://xx.xxx.xxx.xxx:8082/foo,返回foo version 3,项目不需要重启。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值