如何解决即使HealthStatus处于关闭状态,Micronaut健康端点仍返回200
因此,我尝试根据文档实施自定义运行状况检查终结点。对于自定义主体和父健康主体,它都将STATUS作为DOWN返回,但是HTTP响应代码仍为200。现在根据文档,
“最差”状态将作为总体状态返回。
这对于健康状态成立,但对于HTTP状态似乎不成立。如何使此自定义端点使运行状况端点按需要返回503而不是200?
我的源代码示例:
package my.app.util;
import io.micronaut.context.annotation.Requires;
import io.micronaut.context.annotation.Value;
import io.micronaut.health.HealthStatus;
import io.micronaut.http.HttpRequest;
import io.micronaut.http.HttpResponse;
import io.micronaut.http.client.RxHttpClient;
import io.micronaut.http.client.annotation.Client;
import io.micronaut.management.endpoint.health.HealthEndpoint;
import io.micronaut.management.health.aggregator.HealthAggregator;
import io.micronaut.management.health.indicator.HealthIndicator;
import io.micronaut.management.health.indicator.HealthResult;
import org.reactivestreams.Publisher;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.Collections;
@Singleton
@Requires(property = HealthEndpoint.PREFIX + ".url.enabled",value = "true")
@Requires(beans = HealthEndpoint.class)
public class ExternalHealthIndicator implements HealthIndicator {
@Inject
@Client(id = "client")
private RxHttpClient client;
@Value("${micronaut.http.services.external.url}")
protected String externalUrl;
@Override
public Publisher<HealthResult> getResult() {
return client.exchange(HttpRequest.HEAD("/health"))
.map(this::checkStatusCode)
.onErrorReturn(this::statusException);
}
private HealthResult checkStatusCode(HttpResponse<?> response) {
final int statusCode = response.getStatus().getCode();
final boolean statusOk = statusCode >= 200 && statusCode < 400;
final HealthStatus healthStatus = statusOk ? HealthStatus.UP : HealthStatus.DOWN;
return HealthResult.builder("ExternalUrl",healthStatus)
.details(Collections.singletonMap("url",externalUrl + "/health"))
.build();
}
private HealthResult statusException(Throwable exception) {
return HealthResult.builder("ExternalUrl",HealthStatus.DOWN)
.details(Collections.singletonMap("url",externalUrl + "/health"))
.status(HealthStatus.DOWN)
.exception(exception)
.build();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。