在 Spring Cloud Config Client 中启用 /bus/refresh 端点

Posted

技术标签:

【中文标题】在 Spring Cloud Config Client 中启用 /bus/refresh 端点【英文标题】:Enabling /bus/refresh endpoint in Spring Cloud Config Client 【发布时间】:2017-10-12 07:22:45 【问题描述】:

我的 Spring Cloud Config Client 依赖于 spring.cloud.starter.bus.amqp,但它仍然没有启用 /bus/refresh endpoint

build.gradle    
compile("org.springframework.cloud:spring-cloud-starter-stream-rabbit:1.1.3.RELEASE")    
compile("org.springframework.cloud:spring-cloud-starter-bus-amqp:1.2.2.RELEASE")

我的配置客户端应用程序中有这些依赖项,但仍未启用 /bus/refresh/bus/env

请让我知道我的客户端应用程序中缺少什么。

注意:

spring.cloud.bus.refresh.enabled: true
spring.cloud.bus.env.enabled: true
endpoints.spring.cloud.bus.refresh.enabled: true
endpoints.spring.cloud.bus.env.enabled: true

我尝试在application.ymlapplication.properties 中设置这些指标,因为BusAutoConfiguration 使用这些指标, 启用/bus/* 端点。

@ConditionalOnProperty(value = "endpoints.spring.cloud.bus.refresh.enabled", matchIfMissing = true)

在我的 Spring Cloud Config Server 应用程序中,我禁用了这些端点,即设置为 false

endpoints.spring.cloud.bus.refresh.enabled: false
endpoints.spring.cloud.bus.env.enabled: false

并观察到在 Spring Boot 启动期间 /bus/* 端点未启用。

【问题讨论】:

你是在导入 bom 吗? “未启用”是什么意思?你点击它,你得到一个 404,什么? 【参考方案1】:

您是否将客户的网址映射到/bus/refresh?我相信它默认映射到/refresh

您也可以尝试在以下位置向客户端应用发送 POST 请求:

curl -X POST http://server:port/refresh

我也相信你可能不需要spring-cloud-starter-stream-rabbit 依赖,只需要spring-cloud-starter-bus-amqp

顺便说一句,我在Refreshable Configuration using Spring Cloud Config Server, Spring Cloud Bus, RabbitMQ and Git 上发布了一篇详细的带有工作演示的帖子,这可能会对您有所帮助。

【讨论】:

谢谢 [***.com/users/6679072/ootero],问题已解决 @ootero 将客户端的 url 映射到 /actuator/bus-refresh 是什么意思 @legend 使用 Spring Cloud Config Client 依赖的应用程序。另外,我想我提到了 /actuator/refresh 而不是 /actuator/bus-refresh【参考方案2】:

用我截至 2018 年 4 月 12 日的发现更新这个问题

/actuator/bus-refresh 是从配置服务器出发的方式。

在您的 application.properties 中:

spring.cloud.bus.enabled=true
management.endpoints.web.exposure.include=bus-refresh

示例: curl -X POST http://localhost:8080/actuator/bus-refresh

通知所有注册的客户端更新他们的配置。

我发现的大多数现有文章都没有这个,但我设法找到了基于反复试验和解决方案花絮的最简单的文章。

【讨论】:

根据 Spring Cloid 的 David Syer 的说法,这不应该。这是一个将在 7 月的某个时候修复的错误,所以希望这会有所改变。 我使用了您上面提到的属性,这些属性帮助了我一半。除此之外,我还将微服务模块中的 maven 依赖项从 spring-rabbit 更新为 spring-cloud-starter-bus-amqp。我在下面提供了我的答案/解决方案,只是针对最新的春季版本和发布。谢谢,乍得。【参考方案3】:

我遇到了完全相同的问题。我的观察如下: 我纠正了这一点,RabbitMQ/AMQP maven 依赖是我的主要问题。

我的微服务和 springCloudConfigServer 模块正在使用以下内容:2.2.4.RELEASE - Hoxton.SR1

我的pom.xml如下:

        <!-- Use this! I replaced this maven dep. for following one -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>

        <!-- I was using this maven dep. initially which when replaced by the above solved my issue. Avoid using this for now.
        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit</artifactId>
        </dependency>
        -->

我的application.properties/bootstrap.properties如下:

management.endpoints.web.exposure.include=bus-refresh

这个网址对我有用:http://localhost:8080/actuator/bus-refresh 而不是:/bus/refresh/bus/env

1) 您需要在微服务模块中同时拥有 spring-boot-starter-actuatorspring-cloud-starter-bus-amqp maven 依赖项还有你的 springCloudConfigServer 模块。

2) 在我的微服务模块中,当我使用 spring-rabbit maven dep. & 当我尝试执行 URL: /actuator/bus-refresh 时,它总是以错误响应 404 失败!出于某种原因。

3) 然后,我将我的微服务 pom 文件从 spring-rabbit 更新为 spring-cloud-starter-bus-amqp,并再次尝试了相同的 URL .有效!我的推论很简单。 只是因为某些原因,'spring-rabbit' 确实不支持 /actuator/bus-refresh。 (我在做了同样的试验和错误后才知道这一点)

希望这对您有所帮助。 如果没有,你可以参考this link & this also.

【讨论】:

【参考方案4】:

查看代码发现spring.cloud.config.bus.enabled被设置为false或者被覆盖。

我在 Spring Boot 之上使用了企业框架 jar;在bootstrap.yml 中将spring.cloud.config.bus.enabled 设为true,但这已被配置服务器属性文件覆盖,即git 属性文件存储库的值为false,并为其提供了偏好。

localhost:<port>/env

应显示来自不同来源的所有属性;像配置服务器,application.yml 作为服务 jar 的一部分。从一个获得偏好的人中脱颖而出。

"configService:github uri":  list of properties 
"systemProperties":  list of properties 
"applicationConfig: [classpath:/application.properties]":  list of properties 

在春季以下,env 休息资源被用于确保此属性的准确值。

localhost:<port>/env/spring.cloud.config.bus.enabled

【讨论】:

以上是关于在 Spring Cloud Config Client 中启用 /bus/refresh 端点的主要内容,如果未能解决你的问题,请参考以下文章

spring-cloud-config:spring-cloud-config Maven配置错误

spring-cloud-config-server

无法通过 spring.cloud.config.enabled:false 禁用 Spring Cloud Config

Spring Cloud搭建手册——Spring Cloud Config

0701-spring cloud config-简介Config Server开发Config Client开发

问题 spring-cloud-config 和 spring-cloud-bus