# 从浅入深 学习 SpringCloud 微服务架构(十七)--Spring Cloud config(2)

从浅入深 学习 SpringCloud 微服务架构(十七)–Spring Cloud config(2)

一、springcloudConfig 入门案例:搭建 config 服务端

1、登录 码云:https://gitee.com/

1)点击右上角 【+】 再点击【新建仓库】

仓库名称:config-repostory
公开
勾选【设置模板(添加 Readme,lssue,Pull Request 模板文件)】

2)点击 【创建】。

2、把 生产者 子工程 product_service (子模块)中的 配置文件 application.yml 文件,复制两份,分别命名为:并修改端口号为:9001, 9002, 然后上传至 gitee 仓库中。

1)文件命名规则:

  • {application}–{profile}.yml
  • {application}–{profile}.properties
  • application 为应用名称,profile 指开发环境(用于区分开发环境,测试环境,生产环境等)。

2)application-dev.yml

##  spring_cloud_demo\product_service\src\main\resources\application-dev.ymlserver:port: 9001  # 启动端口 命令行注入。
spring:application:name: service-product  #spring应用名, # 注意 FeignClient 不支持名字带下划线datasource:driver-class-name: com.mysql.jdbc.Driver  # mysql 驱动url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghaiusername: rootpassword: 12311jpa:database: MySQLshow-sql: trueopen-in-view: true
eureka:  # 配置 Eurekaclient:service-url:defaultZone: http://localhost:9000/eureka/instance:prefer-ip-address: true  # 使用 ip 地址注册instance-id: ${spring.cloud.client.ip-address}:${server.port}  # 向注册中心注册服务的id(IP 地址)。
name: djh-dev  # 开发环境

3)application-pro.yml

##  spring_cloud_demo\product_service\src\main\resources\application-pro.ymlserver:port: 9002  # 启动端口 命令行注入。
spring:application:name: service-product  #spring应用名, # 注意 FeignClient 不支持名字带下划线datasource:driver-class-name: com.mysql.jdbc.Driver  # mysql 驱动url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghaiusername: rootpassword: 12311jpa:database: MySQLshow-sql: trueopen-in-view: true
eureka:  # 配置 Eurekaclient:service-url:defaultZone: http://localhost:9000/eureka/instance:prefer-ip-address: true  # 使用 ip 地址注册instance-id: ${spring.cloud.client.ip-address}:${server.port}  # 向注册中心注册服务的id(IP 地址)。
name: djh-pro  # 生产环境

4)码云:https://gitee.com/ 的 config-repostory 仓库中,点击【文件】,再点击【上传】
把 application-dev.yml ,和 application-pro.yml 传上去。

提交信息:2024-5-11-1

点击【提交】。

3、Spring Cloud Config:入门案例–搭建 config 服务端–在父工程 spring_cloud_demo 下,创建子工程 config_service(子模块)

3.1 创建 子工程 config_service(子模块)
	--> 右键 spring_cloud_demo 父工程--> Modules --> Maven --> Groupld : ( djh.it )Artifactld : ( config_service )Version : 1.0-SNAPSHOT--> Next --> Module name: ( config_service )Content root : ( spring_cloud_demo\config_service)Module file location: ( spring_cloud_demo\config_service )--> Finish
3.2 在 子工程 config_service (子模块)中的 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"><parent><artifactId>spring_cloud_demo</artifactId><groupId>djh.it</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>config_service</artifactId><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency></dependencies>
</project>
<!-- spring_cloud_demo\config_service\pom.xml -->
3.3 在 子工程 config_service (子模块)中,创建启动类 ConfigServerApplication.java
/***   spring_cloud_demo\config_service\src\main\java\djh\it\config\ConfigServerApplication.java**   2024-5-11 启动类 ConfigServerApplication.java*/package djh.it.config;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}
}
3.4 在 子工程 config_service (子模块)中,创建配置文件 application.yml
##  spring_cloud_demo\config_service\src\main\resources\application.ymlserver:port: 10000  # 启动端口 命令行注入。
spring:application:name: config-server  #spring应用名, # 注意 FeignClient 不支持名字带下划线cloud:config:server:git:uri: https://gitee.com/djh-xian/config-repostory.git

4、运行启动类 ConfigServerApplication.java,进行测试

浏览器地址栏输入:localhost:10000/product-dev.yml 会显示配置文件内容。

在这里插入图片描述

二、springcloudConfig 入门案例:客户端改造,动态获取配置信息

1、在 product_service 子工程(子模块)的 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"><parent><artifactId>spring_cloud_demo</artifactId><groupId>djh.it</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>product_service</artifactId><dependencies><!-- springcloudgateway 的内部是通过 netty + webflux 实现。webflux 实现和 springmvc 存在冲突,需要注销掉父工程中的 web 依赖,在各子模块中导入 web 依赖。--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><!--            <version>5.1.32</version>--><version>8.0.26</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- 引入 EurekaClient 依赖坐标 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!-- 引入 sleuth 链路追踪 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId></dependency><!-- 引入 zipkin 依赖坐标 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId></dependency><!-- 引入 rabbit 相关 依赖坐标 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sleuth-zipkin</artifactId></dependency><dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-rabbit</artifactId></dependency><!-- 引入 动态获取配置信息 相关依赖坐标  --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency></dependencies>
</project>
<!-- spring_cloud_demo\product_service\pom.xml -->

2、在 product_service 子工程(子模块)中,删除 application.yml 配置文件,创建 bootstrap.yml 配置文件,让它从 gitee 中动态拉取 application.yml 配置文件。

##  spring_cloud_demo\product_service\src\main\resources\bootstrap.ymlspring:cloud:config:name: application  # 应用名称,需要对应 gitee 中配置文件名称的前半部分profile: dev   # 开发环境     label: master  # gitee 中的分支uri: http://localhost:10000  # config-server 的请求地址。

3、启动 product_service(9001), eureka_service, config_server 三个子项目的启动类,进行测试。

浏览器地址栏输入:localhost:9001/product/1 会显示从 MySQL 摘取的数据内容。
浏览器地址栏输入:localhost:9001/product/test 会显示:djh-dev

4、更改 product_service 子工程(子模块)的 bootstrap.yml 配置文件,使用 pro 生产环境。

##  spring_cloud_demo\product_service\src\main\resources\bootstrap.ymlspring:cloud:config:name: application  # 应用名称,需要对应 gitee 中配置文件名称的前半部分# profile: dev   # 开发环境profile: pro   # 生产环境label: master  # gitee 中的分支uri: http://localhost:10000  # config-server 的请求地址。

5、再次启动 product_service(9002), eureka_service, config_server 三个子项目的启动类,重新进行测试。

浏览器地址栏输入:localhost:9002/product/1 会显示从 MySQL 摘取的数据内容。
浏览器地址栏输入:localhost:9002/product/test 会显示:djh-pro

在这里插入图片描述
在这里插入图片描述

三、springcloudConfig 入门案例:手动刷新数据

1、在 product_service 子工程(子模块)的 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"><parent><artifactId>spring_cloud_demo</artifactId><groupId>djh.it</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>product_service</artifactId><dependencies><!-- springcloudgateway 的内部是通过 netty + webflux 实现。webflux 实现和 springmvc 存在冲突,需要注销掉父工程中的 web 依赖,在各子模块中导入 web 依赖。--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><!--            <version>5.1.32</version>--><version>8.0.26</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- 引入 EurekaClient 依赖坐标 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!-- 引入 sleuth 链路追踪 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId></dependency><!-- 引入 zipkin 依赖坐标 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId></dependency><!-- 引入 rabbit 相关 依赖坐标 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sleuth-zipkin</artifactId></dependency><dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-rabbit</artifactId></dependency><!-- 引入 动态获取配置信息 相关依赖坐标  --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><!-- 引入 手动刷新数据 相关依赖坐标  --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency></dependencies>
</project>
<!-- spring_cloud_demo\product_service\pom.xml -->

2、修改 product_service 子工程(子模块)的 Controller 类 ProductController.java 添加动态刷新数据。

/***  spring_cloud_demo\product_service\src\main\java\djh\it\product\controller\ProductController.java**  2024-5-11 商品的 controller 类 ProductController.java*/
package djh.it.product.controller;import djh.it.product.domain.Product;
import djh.it.product.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/product")
@RefreshScope  //开启动态刷新
public class ProductController {@Autowiredprivate ProductService productService;@Value("${name}")private String name;@RequestMapping(value = "/{id}", method = RequestMethod.GET)public Product findById(@PathVariable Long id){return productService.findById(id);}@RequestMapping(value = "/test")public String test (){return name;}}

3、修改 product_service 子工程(子模块)的 bootstrap.yml 配置文件,添加 动态刷新的请求路径端点配置。

##  spring_cloud_demo\product_service\src\main\resources\bootstrap.ymlspring:cloud:config:name: application  # 应用名称,需要对应 gitee 中配置文件名称的前半部分profile: dev   # 开发环境# profile: pro   # 生产环境label: master  # gitee 中的分支uri: http://localhost:10000  # config-server 的请求地址。
# 开启动态刷新的请求路径端点
management:endpoints:web:exposure:include: refresh

4、再次启动 product_service(9001), eureka_service, config_server 三个子项目的启动类,重新进行测试。

1)浏览器地址栏输入:localhost:9001/product/1 会显示从 MySQL 摘取的数据内容。
浏览器地址栏输入:localhost:9001/product/test 会显示:djh-dev

在这里插入图片描述

2)登录 码云:https://gitee.com/ 的 config-repostory 仓库中,点击application.yml 文件,再点击【编辑】,修改内容: name: djh-dev 开发环境,不注释汉字了。

提交信息:2024-5-11-1

点击【提交】。
在这里插入图片描述

3)浏览器地址栏输入:localhost:9001/product/1 会显示从 MySQL 摘取的数据内容。
浏览器地址栏输入:localhost:9001/product/test 会显示:djh-dev 没有更新。

4)打开 Postman 软件,POST 请求地址:http://localhost:9001/actuator/refresh 刷新缓存后。

在这里插入图片描述

5)浏览器地址栏输入:localhost:9001/product/1 会显示从 MySQL 摘取的数据内容。
浏览器地址栏输入:localhost:9001/product/test 不用重新启动 product_service 启动类,
会动态刷新数据显示:djh-dev-5-12。

在这里插入图片描述

四、springcloudConfig 高可用-上

1、在 config_service 子工程(子模块)的 pom.xml 文件中,导入 springcloudConfig 高可用相关依赖坐标。

<?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>spring_cloud_demo</artifactId><groupId>djh.it</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>config_service</artifactId><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><!-- springcloudConfig 高可用 --><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><!-- 引入 EurekaClient 依赖坐标 --><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-config</artifactId></dependency><!-- 引入 手动刷新数据 相关依赖坐标  --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency></dependencies>
</project>
<!-- spring_cloud_demo\config_service\pom.xml -->

2、在 config_service 子工程(子模块)的 application.yml 文件中,添加 eureka 配置。

##  spring_cloud_demo\config_service\src\main\resources\application.ymlserver:port: 10001  # 启动端口 命令行注入。
spring:application:name: config-server  #spring应用名, # 注意 FeignClient 不支持名字带下划线cloud:config:server:git:uri: https://gitee.com/djh-xian/config-repostory.git
eureka: # 配置 eureka_serverclient:service-url: # 配置暴露给 EurekaClient 的请求地址defaultZone: http://127.0.0.1:9000/eureka/  # 配置高可用时,须配置为另一个 EurekaServerApplication 的端口号,如:8000instance:prefer-ip-address: true  # 使用 ip 地址注册instance-id: ${spring.cloud.client.ip-address}:${server.port}

3、在 idea 的 RunDashboard 面板,复制一个 ConfigServerApplication 模拟高可用, 更名为 ConfigServerApplication(2),application.yml 启动端口改为 10001。

在这里插入图片描述

4、启动 product_service(9001), eureka_service, config_server(ConfigServerApplication,ConfigServerApplication(2))四个启动类,进行测试。

1)浏览器地址栏输入:localhost:9000 登录到 eureka 注册中心,发现 2 个微服务,其中 config-server 有两个端口(10000,10001)。

2)浏览器地址栏输入:localhost:10000/product/1
浏览器地址栏输入:localhost:10001/product/1 都能获取到数据。

在这里插入图片描述

五、springcloudConfig 高可用-下

1、在 product_service 子工程(子模块)的 bootstrap.yml 文件中,添加 Eureka 服务发现。

##  spring_cloud_demo\product_service\src\main\resources\bootstrap.ymlspring:cloud:config:name: application  # 应用名称,需要对应 gitee 中配置文件名称的前半部分profile: dev   # 开发环境# profile: pro   # 生产环境label: master  # gitee 中的分支# uri: http://localhost:10000  # config-server 的请求地址。discovery:   # 通过注册中心获取 config-server 配置enabled: trueservice-id: config-server  #服务名# 开启动态刷新的请求路径端点
management:endpoints:web:exposure:include: refresh
eureka:  # 配置 Eurekaclient:service-url:defaultZone: http://localhost:9000/eureka/instance:prefer-ip-address: true  # 使用 ip 地址注册instance-id: ${spring.cloud.client.ip-address}:${server.port}  # 向注册中心注册服务的id(IP 地址)。

2、启动 product_service(9001), eureka_service, config_server(ConfigServerApplication,ConfigServerApplication(2))四个启动类,进行测试。

1)浏览器地址栏输入:localhost:9001/prodcut/1
浏览器地址栏输入:localhost:9001/prodcut/test 都可以正常访问。

2)说明:两个 config-server 都注册到 Eureka, 微服务 Product_service 可以通过 Eureka 注册中心,获取信息,这样,即使 有一个 config-server 挂掉,也不会影响获取数据。

在这里插入图片描述

六、springcloudConfig:结合消息总线 bus 动态修改配置文件信息

1、消息总线 bus

在微服务架构中,通常会使用轻量级的消息代理来构建一个共用的消息主题来连接各个微服务实例,它广播的消息会被所有在注册中心的微服务实例监听和消费,也称消息总线。SpringCloud 中也有对应的解决方案,SpringCloud Bus 将分布式的节点用轻量的消息代理连接起来可以很容易搭建消息总线,配合 SpringCloud config 实现微服务应用配置信息的动态更新

2、根据下图我们可以看出利用 Spring Cloud Bus 做配置更新的步骤:

  • 提交代码触发 post 请求给 bus/refresh。
  • server 端接收到请求并发送给 Spring Cloud Bus。
  • Spring Cloud bus 接到消息并通知给其它客户端。
  • 其它客户端接收到通知,请求 Server 端获取最新配置。
  • 全部客户端均获取到最新的配置。

3、在 config_service 子工程(子模块)的 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"><parent><artifactId>spring_cloud_demo</artifactId><groupId>djh.it</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>config_service</artifactId><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><!-- springcloudConfig 高可用 --><!-- 引入 消息总线的 依赖 --><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><!-- 引入 EurekaClient 依赖坐标 --><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-config</artifactId></dependency><!-- 引入 手动刷新数据 相关依赖坐标  --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency></dependencies>
</project>
<!-- spring_cloud_demo\config_service\pom.xml -->

4、在 config_service 子工程(子模块)的 application.yml 文件中,添加 消息总线 配置。

##  spring_cloud_demo\config_service\src\main\resources\application.ymlserver:port: 10000  # 启动端口 命令行注入。
spring:application:name: config-server  #spring应用名, # 注意 FeignClient 不支持名字带下划线cloud:config:server:git:uri: https://gitee.com/djh-xian/config-repostory.git# 配置消息总线rabbitmq:host: 127.0.0.1port: 5672username: guestpassword: guest
management:endpoints:web:exposure:include: bus-refresh  # 暴露的端点
eureka: # 配置 eureka_serverclient:service-url: # 配置暴露给 EurekaClient 的请求地址defaultZone: http://127.0.0.1:9000/eureka/  # 配置高可用时,须配置为另一个 EurekaServerApplication 的端口号,如:8000instance:prefer-ip-address: true  # 使用 ip 地址注册instance-id: ${spring.cloud.client.ip-address}:${server.port}

5、在 product_service 子工程(子模块)的 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"><parent><artifactId>spring_cloud_demo</artifactId><groupId>djh.it</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>product_service</artifactId><dependencies><!-- springcloudgateway 的内部是通过 netty + webflux 实现。webflux 实现和 springmvc 存在冲突,需要注销掉父工程中的 web 依赖,在各子模块中导入 web 依赖。--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><!--            <version>5.1.32</version>--><version>8.0.26</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- 引入 EurekaClient 依赖坐标 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!-- 引入 sleuth 链路追踪 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId></dependency><!-- 引入 zipkin 依赖坐标 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId></dependency><!-- 引入 rabbit 相关 依赖坐标 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sleuth-zipkin</artifactId></dependency><dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-rabbit</artifactId></dependency><!-- 引入 动态获取配置信息 相关依赖坐标  --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><!-- 引入 手动刷新数据 相关依赖坐标  --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</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></dependencies>
</project>
<!-- spring_cloud_demo\product_service\pom.xml -->

6、在 product_service 子工程(子模块)的 bootstrap.yml 文件中,删除掉 动态刷新 配置。

##  spring_cloud_demo\product_service\src\main\resources\bootstrap.ymlspring:cloud:config:name: application  # 应用名称,需要对应 gitee 中配置文件名称的前半部分profile: dev   # 开发环境# profile: pro   # 生产环境label: master  # gitee 中的分支# uri: http://localhost:10000  # config-server 的请求地址。discovery:   # 通过注册中心获取 config-server 配置enabled: trueservice-id: config-server  #服务名
eureka:  # 配置 Eurekaclient:service-url:defaultZone: http://localhost:9000/eureka/instance:prefer-ip-address: true  # 使用 ip 地址注册instance-id: ${spring.cloud.client.ip-address}:${server.port}  # 向注册中心注册服务的id(IP 地址)。

7、修改 gitee.com 服务器上的配置文件 application-pro.yml,添加 消息总线 配置。

##  spring_cloud_demo\product_service\src\main\resources\application.ymlserver:port: 9001  # 启动端口 命令行注入。
spring:application:name: service-product  #spring应用名, # 注意 FeignClient 不支持名字带下划线datasource:driver-class-name: com.mysql.jdbc.Driver  # mysql 驱动url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghaiusername: rootpassword: 12311jpa:database: MySQLshow-sql: trueopen-in-view: true# 配置消息总线rabbitmq:host: 127.0.0.1port: 5672username: guestpassword: guest  
eureka:  # 配置 Eurekaclient:service-url:defaultZone: http://localhost:9000/eureka/instance:prefer-ip-address: true  # 使用 ip 地址注册instance-id: ${spring.cloud.client.ip-address}:${server.port}  # 向注册中心注册服务的id(IP 地址)。
name: djh-dev-5-12  # 开发环境

8、启动 product_service, eureka_service, config_server(ConfigServerApplication,ConfigServerApplication(2))四个启动类,进行测试。

1)浏览器地址栏输入:localhost:10000/application-dev.yml 正常访问到 gitee 服务器上的配置文件。

2)浏览器地址栏输入:http://localhost:9001/product/1
浏览器地址栏输入:localhost:9001/prodcut/test 都可以正常访问 。

3)登录 码云:https://gitee.com/ 的 config-repostory 仓库中,点击 application-dev.yml 文件,再点击【编辑】,修改内容: name: djh-dev 开发环境,不注释汉字了。

提交信息:2024-5-11-1

点击【提交】。
在这里插入图片描述

3)
浏览器地址栏输入:localhost:9001/product/1 会显示从 MySQL 摘取的数据内容。
浏览器地址栏输入:localhost:9001/product/test 会显示:djh-dev-5-12 没有更新。

4)打开 Postman 软件,POST 请求地址:http://localhost:10000/actuator/bus-refresh 向消息总线刷新数据。

5)
浏览器地址栏输入:localhost:9001/product/1 会显示从 MySQL 摘取的数据内容。
浏览器地址栏输入:localhost:9001/product/test 不用重新启动 product_service 启动类,
会更新数据显示:djh-dev-5-12 开发环境。

在这里插入图片描述

上一节关联链接请点击:
# 从浅入深 学习 SpringCloud 微服务架构(十七)–Spring Cloud config(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/836754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java | Leetcode Java题解之第73题矩阵置零

题目&#xff1a; 题解&#xff1a; class Solution {public void setZeroes(int[][] matrix) {int m matrix.length, n matrix[0].length;boolean flagCol0 false;for (int i 0; i < m; i) {if (matrix[i][0] 0) {flagCol0 true;}for (int j 1; j < n; j) {if (…

浮点数的由来及运算解析

数学是自然科学的皇后&#xff0c;计算机的设计初衷是科学计算。计算机的最基本功能是需要存储整数、实数&#xff0c;及对整数和实数进行算术四则运算。 但是在计算机从业者的眼中&#xff0c;我们知道的数学相关的基本数据类型通常是整型、浮点型、布尔型。整型又分为int8&a…

Kerberos修改协议为TCP

部署前 修改模板/home/cloud-setup/deploy-forklift/mids/forklift-basic/kde/v1.0/impl/plays/roles/krb5-client/templates/krb5.conf.j2 添加如下参数 udp_preference_limit 1 部署后 界面修改 添加如下参数&#xff0c;并勾选下发配置按钮&#xff0c;重启刷新服务

Linux防火墙iptalbes

1 iptalbes 1.1 概念 防火墙(Firewall)是一种隔离技术&#xff0c;用于安全管理与筛选的软件和硬件设备&#xff0c;使计算机内网和外网分开&#xff0c;可以防止外部网络用户以非法手段通过外部网络进入内部网络&#xff0c;保护内网免受外部非法用户的侵入。 1.2 SELinux …

pywinauto,一款Win自动化利器!

pywinauto&#xff0c;一款Win自动化利器&#xff01; 1.安装 pywinauto是一个用于自动化Python模块&#xff0c;适合Windows系统的软件&#xff08;GUI&#xff09;&#xff0c;可以通过Pywinauto遍历窗口&#xff08;对话框&#xff09;和窗口里的控件&#xff0c;也可以控…

前端动态旋转地球背景

效果图 贴下源码 <template><div class"map-bg"><div class"canvas" id"canvs"></div><canvas class"canvasxk" id"canv"></canvas></div> </template><script setup …

栈的实现与OJ括号匹配

今日备忘录: "不破不立. " 本文索引 1. 前言2. 顺序表与链表的区别3. 什么是栈4. 栈的实现5. OJ括号匹配6. 总结 1. 前言 人总是在坍塌中重建, 有些东西必须摧毁, 才能迎来新生, 不管是那些消耗你的人, 还是令你感到焦虑的事情, 还是一份你觉得毫无意义并且又不喜欢…

(车载)毫米波雷达信号处理中的恒虚警检测(CFAR)技术概述

说明 恒虚警检测(Constant False-Alarm Rate, CFAR)是雷达目标(信号)检测中很重要的一个概念&#xff0c;从事雷达相关科研或工程研发的或多或少应该都接触过。CFAR这项技术在工程实践上其实是比较简单的(至少在我了解的车载雷达领域)&#xff0c;不过这项技术也有很多可以深挖…

Ansys ACT的一个例子

由XML和IronPython文件组成&#xff0c;文件结构如下&#xff1a; ExtSample.xml <extension version"1" name"ExtSample1"><guid shortid"ExtSample1">2cc739d5-9011-400f-ab31-a59e36e5c595</guid><script src"sam…

10分钟了解Flink SQL使用

Flink 是一个流处理和批处理统一的大数据框架&#xff0c;专门为高吞吐量和低延迟而设计。开发者可以使用SQL进行流批统一处理&#xff0c;大大简化了数据处理的复杂性。本文将介绍Flink SQL的基本原理、使用方法、流批统一&#xff0c;并通过几个例子进行实践。 1、Flink SQL基…

【Linux】17. 进程间通信 --- 管道

1. 什么是进程间通信(进程间通信的目的) 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程之间共享同样的资源。 通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了…

Springboot自动装配源码分析

版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --> </par…

第六十节 Java设计模式 - 过滤器/标准模式

Java设计模式 - 过滤器/标准模式 过滤器模式使用不同的条件过滤对象。 这些标准可以通过逻辑操作链接在一起。 过滤器模式是一种结构型模式。 例子 import java.util.List; import java.util.ArrayList;class Employee {private String name;private String gender;private…

决策树学习记录

对于一个决策树的决策面&#xff1a; 他其实是在任意两个特征基础上对于所有的点进行一个分类&#xff0c;并且展示出不同类别的之间的决策面&#xff0c;进而可以很清楚的看出在这两个特征上各个数据点种类的分布。 对于多输出的问题&#xff0c;在利用人的上半张脸来恢复下半…

ICode国际青少年编程竞赛- Python-4级训练场-复杂嵌套for循环

ICode国际青少年编程竞赛- Python-4级训练场-复杂嵌套for循环 1、 for i in range(4):Dev.step(i6)for j in range(3):Dev.turnLeft()Dev.step(2)2、 for i in range(4):Dev.step(i3)for j in range(4):Dev.step(2)Dev.turnRight()Dev.step(-i-3)Dev.turnRight()3、 for i …

Windows关闭NGINX命令

1、首先用cmd进入NGINX的目录下,输入下面命令&#xff0c;查看nginx是否启动 tasklist /fi "imagename eq nginx.exe"2、关闭nginx taskkill /f /t /im nginx.exe3、启动&#xff1a;start nginx 4、重启&#xff1a;nginx -s reload

【牛客】SQL211 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary

1、描述 有一个薪水表salaries简况如下&#xff1a; 请你获取薪水第二多的员工的emp_no以及其对应的薪水salary&#xff0c; 若有多个员工的薪水为第二多的薪水&#xff0c;则将对应的员工的emp_no和salary全部输出&#xff0c;并按emp_no升序排序。 2、题目建表 drop table …

ctfshow 源码审计 web301--web305

web301 在checklogin.php 发现了 $sql"select sds_password from sds_user where sds_username".$username." order by id limit 1;";在联合查询并不存在的数据时&#xff0c;联合查询就会构造一个虚拟的数据就相当于构造了一个虚拟账户&#xff0c;可以…

MSMQ消息队列

MQ是一种企业服务的消息中间节技术&#xff0c;这种技术常常伴随着企业服务总线相互使用&#xff0c;构成了企业分布式开发的一部分&#xff0c;如果考虑到消息的发送和传送之间是可以相互不联系的并且需要分布式架构&#xff0c;则可以考虑使用MQ做消息的中间价技术&#xff0…

如何给远程服务器配置代理

目录 前言 正文 更换镜像源 开始之前 安装过程 遇到的问题 尾声 &#x1f52d; Hi,I’m Pleasure1234&#x1f331; I’m currently learning Vue.js,SpringBoot,Computer Security and so on.&#x1f46f; I’m studying in University of Nottingham Ningbo China&#x1f4…