我有一个基于SpringBoot的web应用程序,它公开了一个Consor健康指示器bean
{
"status": "UP",
"components": {
"Kafka": {...},
"SchemaRegistry": {...},
"discoveryComposite": {...},
"diskSpace": {...},
"ping": {...},
"refreshScope": {...}
}
}
在进一步检查后,我发现了负责获取所有可用指标的下面片段(HealthEndpoint Configuration.java):
@Bean
@ConditionalOnMissingBean
HealthContributorRegistry healthContributorRegistry(ApplicationContext applicationContext,
HealthEndpointGroups groups) {
Map<String, HealthContributor> healthContributors = new LinkedHashMap<>(
applicationContext.getBeansOfType(HealthContributor.class));
if (ClassUtils.isPresent("reactor.core.publisher.Flux", applicationContext.getClassLoader())) {
healthContributors.putAll(new AdaptedReactiveHealthContributors(applicationContext).get());
}
return new AutoConfiguredHealthContributorRegistry(healthContributors, groups.getNames());
}
在这里设置一个断点,我看到ConsultHealthIndicator bean确实没有列在applicationContext的输出中。getBeansOfType(HealthContributor.class)调用如下所示:
有人能解释一下为什么这个特定的bean出现在根上下文中而不是子上下文中吗?
有没有一种方法可以强制它在子上下文中初始化,以便在健康endpoint中正确注册?
我目前正在使用
提前谢谢你。
我附上了一个样本项目,允许复制的问题
我还包括了应用程序使用的领事配置(你可以通过领事导入命令导入它)<运行上面的示例并转到健康endpoint(localhost:8080/monitoring/health),您将清楚地看到列表中缺少consur组件。
为了让consul指标工作,我必须提供我自己的健康贡献者注册表,在那里我在执行健康贡献者bean查找时考虑父上下文:
@Bean
HealthContributorRegistry healthContributorRegistry(
ApplicationContext applicationContext, HealthEndpointGroups groups) {
Map<String, HealthContributor> healthContributors =
new LinkedHashMap<>(applicationContext.getBeansOfType(HealthContributor.class));
ApplicationContext parent = applicationContext.getParent();
while (parent != null) {
healthContributors.putAll(parent.getBeansOfType(HealthContributor.class));
parent = parent.getParent();
}
return new DefaultHealthContributorRegistry(healthContributors);
}
这是一个临时的解决方法,理想情况下,领事指标应该像其他健康贡献者一样开箱即用。
我有一个基于SpringBoot的web应用程序,它公开了一个Consult health indicator bean。 该bean由SpringBoot的autoconfiguration正确创建和初始化,但是,尽管关联的配置属性“Management.health.consul.Enabled”设置为true,但指示器并未显示在执行器健康endpoint中: 经过进一步检查,我发现了负责获取
Spring Cloud Stream为粘合剂提供健康指标。它以binders的名义注册,可以通过设置management.health.binders.enabled属性启用或禁用。
我正在寻找一种方法来改变Spring Boot的健康检查的头部(添加一些东西到它)。我搜索了这个主题,但我只找到了关于自定义健康功能等的问题(例如,如何在spring boot health中添加自定义健康检查?)。那不是我要找的。 我想使用标准/默认健康功能(因此我不想更改响应的主体(“status”:“up”),也不想实现自己的健康功能或自定义默认功能。我的目标是更改响应的标题以实现两个目标:
对于我一直在开发的一个微服务,我创建了一个自定义健康检查类,扩展了AbstractHealthIndicator,并能够在中获得输出 但当我向领事注册服务时,健康检查状态为失败。 尝试将执行器url配置为领事健康检查为spring。云领事发现健康检查url=http://localhost:8080/actuator/health。但它仍然失败,出现错误http://localhost:8566/
在设置ELB健康检查的对话框中,它会声明: 如果实例未通过健康检查,它将自动从负载均衡器中删除。自定义健康检查以满足您的特定需要。 当健康检查失败时,将从ELB后面删除实例。我的问题是围绕“健康门槛”设置。当你悬停在帮助上时,它会说: 在声明EC2实例健康之前连续运行状况检查成功的次数。 如果实例声明为健康的,它是否被拉回负载平衡组?
我正在使用Quarkus构建REST API。我已经启用了以下微文件健康endpointhttps://quarkus.io/guides/microprofile-health 我想知道如何保护或降低<代码>