Ike1993 2021-07-14 17:06 采纳率: 0%
浏览 712

@RefreshScope无法动态刷新配置的原因?

我使用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

img

Connections

img

Channels

img

Exchanges

img

Queues

img

补充版本信息
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

  • 写回答

1条回答 默认 最新

  • 是赵敢敢啊 2021-07-15 10:08
    关注

    整这么麻烦不如上nacos

    评论

报告相同问题?

问题事件

  • 修改了问题 7月14日
  • 修改了问题 7月14日
  • 创建了问题 7月14日

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题