SpringCloud04 服务配置中心消息总线远程配置动态刷新
Posted 寻渝记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud04 服务配置中心消息总线远程配置动态刷新相关的知识,希望对你有一定的参考价值。
1 环境说明
JDK:1.8
MAVENT:3.5
SpringBoot:2.0.5.RELEASE
SpringCloud:Finchley.SR1
2 创建服务注册中心(Eureka服务端)
说明:本博文仅仅以一个单例的注册中心为例,高可用的服务注册中心请参见
2.1 引入依赖
利用IDEA创建服务注册中心项目时只需要引入 spring-cloud-starter-netflix-eureka-server 一个依赖就可以啦
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
<?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.example</groupId> <artifactId>eureka</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>eureka</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.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>Finchley.SR1</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</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>
2.2 配置文件
配置服务注册中心端口以及服务服务注册中心的应用名
技巧01:单例模式下的服务注册中心需要关闭向其他服务注册中心注册本服务信息功能和从其他服务注册中心拉取注册服务信息功能
server:
port: 8761
spring:
application:
name: eureka
eureka:
client:
fetch-registry: false # 关闭从其他服务注册中心拉取服务信息
register-with-eureka: false # 不向其他服务注册中心注册本服务的信息
2.3 引入服务注册中心配置
需要在启动类上利用@EnableEurekaServer将SpringBoot为我们提供的Eureka的相关配置引入到系统应用中,否则Eureka服务注册中心不会生效
技巧01:@EnableEurekaServer的作用就是将某个配置了Eureka相关配置的类引入到应用容器中
2.4 启动服务注册中心
通过IP和端口访问的效果如果所示
3 创建Eureka客户端
3.1 引入依赖
利用IDEA创建SpringBoot项目时引入 spring-boot-starter-web、spring-cloud-starter-netflix-eureka-client即可,我这里同时引入了devtools、lombok只是为了开发方便而已
<?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.example</groupId> <artifactId>consumer</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>consumer</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.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>Finchley.SR1</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</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-devtools</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </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>
3.2 配置文件
需要配置应用名和应用端口、配置注册中心连接信息
3.4 启动Eureka客户端
在启动类上利用@EnableEurekaClient将Eureka客户端的相关配置引入到应用容器中
3.5 启动Eureka客户端
Eureka客户端启动成功后就可以在Eureka服务端的控制页面看到注册成功的服务信息,例如
4 创建ConfigServer
技巧01:ConfigServer也是一个Eureka客户端,同样需要向Eureka服务端进行注册;只不过这个服务专门负责管理一些配置文件
4.1 引入依赖
利用IDEA创建SpringBoot项目时引入 spring-cloud-starter-netflix-eureka-client 、spring-cloud-config-server 依赖
<?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.example</groupId> <artifactId>config</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>config</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.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>Finchley.SR1</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-devtools</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </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>
4.2 配置文件
需要配置应用端口、应用名、服务注册中心、远程代码仓库
4.3 引入默认配置
利用@EnableEurekaClient将Eureka客户端的默认配置引入到应用容器中,利用@EnableConfigServer将配置中心的的默认配置引入到应用容器中
4.4 启动配置中心应用
技巧01:启动成功后可以在Eureka的控制面板中查看到相关的服务注册信息,例如
4.5 查看远程仓库中的配置信息
技巧01:配置服务中心启动时会暴露一些URL,可以利用这些URL访问远程仓库中的配置文件信息,例如
4.5.1 访问规则说明
/{name}-{profiles} -> /配置文件-环境
/{label}/{name}-{profiles} -> /git分支/配置文件-环境
技巧01:以上两种格式都同时支持 yml、json、properties三种数据格式
4.5.2 git仓库配置文件命名
4.5.3 通过配置中心访问指定的配置文件信息
技巧01:访问任何一个consumer-xxx.yml 的配置文件时都会和 consumer.yml 进行整合;可以将consumer.yml作为共有配置的存放文件
技巧02:使用 /{name}-{profiles} 访问时默认访问master分支,可以在配置中心的配置文件中指定使用哪一个分支
4.6 配置本地仓库路径和远程仓库分支
技巧01:配置中心服务从远程仓库获取到配置文件后会存放到本地的一个默认目录,可以在配置中心服务的配置文件中配置这个本地仓库地址
技巧02:配置中心配置远程仓库地址信息时可以指定使用远程仓库的哪一个分支;如果配置了分支后再使用 /{name}-{profiles} 这种格式获取配置文件信息时就会返回配置分支中的配置文件信息;当然亦可以使用 /label/ /{name}-{profiles} 这种格式访问指定分支的配置文件信息
5 配置中心客户端
技巧01:需要从配置中心服务获取配置信息的服务都可叫作配置中心客户端
5.1 引入依赖
修改第三节的Eureka客户端,只需要再引入 spring-cloud-config-client 即可
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId> </dependency>
5.2 修改配置
将原有的配置全部剪切到远程仓库中对应的consumer.yml配置文件中,并将这个cnsumer.yml多复制几份并制定环境
5.3 配置启动配置文件
场景:config是服务配置中心、consumer是一个需要从config服务中获取配置信息的服务、eureka是服务注册中心
技巧01:config和consumer都必须在eureka中心注册,consumer是通过eureka从config中获取服务的;所以不能直接将配置中心的连接信息配置到application.yml中,而是需要新建一个启动配置文件bootsttap.yml,需要将应用名、配置中心信息、注册中心信息中心配置到bootstrap.yml中
技巧02:在bootstrap.yml中配置的应用名必须和远程仓库中的配置文件保持一致,因为需要通过应用名到配置中心去获取该应用的配置信息
5.4 启动consumer服务
技巧01:启动consumer服务时控制台会打印出配置中心的信息,例如
5.4 使用远程git中的配置文件
技巧01:和使用在 application.yml 中配置的信息一样,例如
5.5 高可用配置中心搭建
将配置中心打包后分别部署就可以啦,版案例利用IDEA通过不同端口启动实现
启动了两个配置中心后,多次重启consumer服务时就会从不同的配置中心获取数据,例如
6 整合消息中线
说明:虽然consumer可以通过配置中心获取到远程仓库中的配置信息,但是我们修改远程仓库中的配置文件时并不能生效;想用时远程仓库的配置生效我们必须一起重启config服务和consumer服务;如果不想通过从前来实现的话就需要使用消息总线来实现。
6.1 集
以上是关于SpringCloud04 服务配置中心消息总线远程配置动态刷新的主要内容,如果未能解决你的问题,请参考以下文章
[转]springcloud:配置中心和消息总线(配置中心终结版)
springcloud:配置中心和消息总线(配置中心终结版)
springcloud:配置中心和消息总线(配置中心终结版)
5.SpringCloud -- 配置中心 Config消息总线 Bus链路追踪 Sleuth配置中心 Nacos