我使用config-server作为配置中心服务端,config-client作为客户端
目前config-server可以正常从远端git仓库拉取到配置信息,config-client可以通过config-server获取配置信息(更新git仓库中配置信息后需要重启客户端才能获取最新配置)
遇到的问题: 我想要使用SpringCloudBus来实现动态的配置信息刷新。安装了RabbitMQ并在config-server和config-client添加依赖并在pom文件进行配置后,通过@RefreshScope无法动态获取最新的配置信息(更新远端仓库配置后依然需要重启服务才能获取最新的配置)
config-server的pom配置如下
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
config-server的application.properties
#服务器端口号
server.port=80
#应用名称
spring.application.name=config-server
#注册中心地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
#配置文件Git地址
spring.cloud.config.server.git.uri=
spring.cloud.config.server.git.username=
spring.cloud.config.server.git.password=
spring.cloud.config.server.git.basedir=
#服务监控,暴露所有端点
management.endpoints.web.exposure.include=*
management.endpoints.web.cors.allowed-origins=*
management.endpoints.web.cors.allowed-methods=*
#开启消息追踪
spring.cloud.bus.trace.enabled=true
#rabbitmq配置信息
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=
spring.rabbitmq.template.mandatory=true
config-server的启动类
@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
config-client的配置
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
#注册中心地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
#开启服务发现(必须开启)
spring.cloud.config.discovery.enabled=true
#找到配置中心实例
spring.cloud.config.discovery.service-id=CONFIG-SERVER
#指定配置文件名称
spring.cloud.config.name=order
#指定环境(文件后缀)
spring.cloud.config.profile=dev
#指定分支
spring.cloud.config.label=master
#开启消息追踪
spring.cloud.bus.trace.enabled=true
#rabbitmq配置信息
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=
测试类
@RestController
@RequestMapping("/config")
@RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
public class TestController {
@Value("${env}")
private String env;
@GetMapping("/getInfo")
public String getInfo() {
return env;
}
}
git仓库中的配置 order-dev.properties
env=204
初步怀疑是RabbitMQ的问题,因为在加了@RefreshScope注解后,访问测试方法localhost:9000/config/getInfo后,config-server的控制台是空的没有输出有拉取配置信息动作的信息,也就是config-server从远端仓库拉取到最新的配置信息后,没有发送消息到RabbitMQ或者是目前版本的一个BUG
RabbitMQ界面如下
Overview
Connections
Channels
Exchanges
Queues
补充版本信息
spring-boot-starter-parent 2.5.2
spring-cloud-starter-bus-amqp 3.0.3
spring-cloud-dependencies 2020.0.3
spring-boot-actuator 2.5.2