标签:actor 步骤 from 使用 12px 云上 round factor rap
在我们了解spring cloud config之前,我可以想想一个配置中心提供的核心功能应该有什么
Spring Cloud Config可以完美的支持以上所有的需求。
Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。Spring cloud使用git或svn存放配置文件,默认情况下使用git,我们先以git为例做一套示例。
1.首先在码云上创建一个 仓库spring-cofig-sever,在仓库里新建三个文件
lf-config-dev.properties 配置env=dev
lf-config-test.properties 配置env=test
lf-config.properties 配置 lf.config=hello lf
2.创建项目,集成spring-cloud-config, 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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>lf.liyouyou</groupId> <artifactId>spring-cloud-netflix-demo</artifactId> <version>1.0-SNAPSHOT</version> </parent> <groupId>lf.liyouyou</groupId> <artifactId>spring-cloud-config</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-cloud-config</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Hoxton.SR8</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </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>
3、启动类开启spring-cloud-config支持
@SpringBootApplication @EnableConfigServer public class SpringCloudConfigApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudConfigApplication.class, args); } }
4、配置properties
spring.application.name=spring-cloud-config server.port=9002 eureka.client.service-url.defaultZone=http://localhost:8000/eureka/ #spring.cloud.config.server.git.uri=https://github.com/**/spring-cloud-netflix-config spring.cloud.config.server.git.uri=https://gitee.com/**/spring-cofig-sever spring.cloud.config.server.git.force-pull=true spring.cloud.config.server.git.username= 用户名 spring.cloud.config.server.git.password= 密码
启动配置中心,启动项目,发现spring-cloud-config服务已经注册到配置中心。
访问http://localhost:9002/spring-cloud-config-client.properties 返回配置
1.创建工程spring-cloud-config-client , 添加spring-cloud-config客户端依赖
2.git上新增对应服务配置文件spring-cloud-config-client.properties 配置:
env=test hello=lf lf.config=spring-cloud-config-client
3.新增controller,获取配置
package lf.liyouyou.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RefreshScope public class ConfigController { @Value("${env}") private String tex; @Value("${hello}") private String hello; @Value("${lf.config}") private String env; @RequestMapping("/hello") public String from() { return env+"-"+tex+"-"+this.hello; } }
启动类添加扫描controller
package lf.liyouyou; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; @SpringBootApplication @ComponentScan(basePackages = "lf.liyouyou.controller") public class SpringCloudConfigCilentApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudConfigCilentApplication.class, args); } }
4.配置bootstrap.properties、application.properties
bootstrap.properties
spring.cloud.config.discovery.enabled=true spring.cloud.config.discovery.service-id=spring-cloud-config eureka.client.service-url.defaultZone=http://localhost:8000/eureka/
application.properties
spring.application.name=spring-cloud-config-client server.port=9003 management.endpoints.web.exposure.include=refresh
启动项目,访问http://localhost:9003/hello ,返回配置。
修改git上对应配置,发现访问http://localhost:9002/spring-cloud-config-client.properties 返回已经修改的配置,而http://localhost:9003/hello则未刷新。
@RefreshScope则可以触发刷新,用postman 或者curl -X POST http://localhost:9003/actuator/refresh进行节点刷新。
再访问而http://localhost:9003/hello,获取最新提交的配置。
三、参照二步骤创建(复制)一个config客户端spring-cloud-config-client-demo工程,端口改为9004,git上新增一个spring-cloud-config-client-demo.properties文件,配置:
lf.liyouyou=liyouyou
启动,访问http://localhost:9004/hello,返回配置。
同时修改git上对应spring-cloud-config-client.properties、spring-cloud-config-client-demo.properties 两个配置,发现访问http://localhost:9002/spring-cloud-config-client-demo.properties、http://localhost:9002/spring-cloud-config-client.properties
返回已经修改的配置,而http://localhost:9004/hello、http://localhost:9003/hello则未刷新。
同样@RefreshScope则可以触发刷新,用postman 或者curl -X POST http://localhost:9003/actuator/refresh进行节点刷新。
再访问而http://localhost:9003/hello,获取最新提交的配置。http://localhost:9004/hello还是未刷新。
再http://localhost:9004/actuator/refresh进行节点刷新,http://localhost:9004/hello才能获取到最新刷新的配置
综上,基于actuator的refresh只能进行单节点刷新
基于消息总线配置+webhook的组合(http://localhost:9002/actuator/bus-refresh 所有节点都刷新),由于git推送信息会推送很多无关信息,会导致json解析异常,为此spring推出了monitor去解决此问题
1.改造spring-cloud-config引入对应bus 、monitor依赖
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>lf.liyouyou</groupId> <artifactId>spring-cloud-netflix-demo</artifactId> <version>1.0-SNAPSHOT</version> </parent> <groupId>lf.liyouyou</groupId> <artifactId>spring-cloud-config</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-cloud-config</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Hoxton.SR8</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </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-starter-bus-kafka</artifactId> </dependency>--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-monitor</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </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>
spring-cloud-bus可以使用rabbitMQ或者kafka进行实现,这边选择使用rabbitMQ进行实现
2.配置文件修改,添加mq 、bus支持
spring.application.name=spring-cloud-config server.port=9002 eureka.client.service-url.defaultZone=http://localhost:8000/eureka/ #spring.cloud.config.server.git.uri=https://github.com/**/spring-cloud-netflix-config spring.cloud.config.server.git.uri=https://gitee.com/**/spring-cofig-sever spring.cloud.config.server.git.force-pull=true spring.cloud.config.server.git.username=** spring.cloud.config.server.git.password=** #Config Server会默认从应用的src/main/resource目录下检索配置文件。 #spring.profiles.active=native #也可以通过如下方式 属性来指定配置文件的位置 #spring.cloud.config.server.native.searchLocations=file:D:/properties/ spring.rabbitmq.host=192.168.**.151 spring.rabbitmq.port=5672 spring.rabbitmq.username=** spring.rabbitmq.password=** ## 刷新时,关闭安全验证 management.security.enabled=false spring.cloud.bus.enabled=true spring.cloud.bus.trace.enabled=true spring.cloud.bus.refresh.enabled=true management.endpoints.web.exposure.include=*
重新启动项目。
3.改造两个config client,pom.xml,配置文件分别添加对bus的支持
pom.xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency>
application.properties
spring.application.name=spring-cloud-config-client server.port=9003 spring.rabbitmq.host=192.168.**.151 spring.rabbitmq.port=5672 spring.rabbitmq.username=** spring.rabbitmq.password=** spring.cloud.bus.enabled=true #management.endpoints.web.exposure.include=refresh management.endpoints.web.exposure.include=*
分别启动即可。
4.检测monitor+bus全局刷新
分别访问,http://localhost:9003/hello http://localhost:9004/hello 获取到对应配置,这时修改git上
同时修改git上对应spring-cloud-config-client.properties、spring-cloud-config-client-demo.properties 两个配置,发现访问http://localhost:9002/spring-cloud-config-client-demo.properties、http://localhost:9002/spring-cloud-config-client.properties
返回已经修改的配置,而http://localhost:9004/hello、http://localhost:9003/hello则未刷新。进行monitor刷新一次spring-cloud-config配置中心服务端
再http://localhost:9004/hello、http://localhost:9003/hello ,发现都获取到了最新提交的配置。
5、再配置webhook自动进行刷新,不需要手动进行http://localhost:9003/monitor进行刷新
新增一个webhook,并配置刷新地址http://localhost:9002外网映射ip/monitor?path=*
但是要注意添加到webhook的内网地址需要用ngrok工具进行外网地址映射,不然无妨访问本地
6、添加完成进行测试
会发现哪怕同时更改git上多个服务的配置,访问http://localhost:9004/hello、http://localhost:9003/hello都能获取到最新配置,
证明webhook已经帮助我们自动进行自动刷新。
标签:actor 步骤 from 使用 12px 云上 round factor rap
原文地址:https://www.cnblogs.com/flgb/p/13876148.html