【发布时间】:2021-03-15 05:23:37
【问题描述】:
我有一个 api 供 kubernetes 调用并检测服务是否可用。在该 api 中,首先调用一个接口获取其他服务的主机,该接口返回一个 Flux,如果结果为空 api 返回 SERVICE_UNAVAILABLE 其他返回好的。我当前的代码如下:
@GetMapping(value = "/gateway/readiness")
public Mono<Long> readiness(ServerHttpResponse response) {
Flux<Map<String, List<String>>> hosts = hostProvider.getHosts();
List<String> hostProviders = new ArrayList<>();
// the below code has a warning: Calling subscribe in a non-blocking scope
hosts.subscribe(new Consumer<Map<String, List<String>>>() {
@Override
public void accept(Map<String, List<String>> stringListMap) {
hostProviders.addAll(stringListMap.keySet());
}
});
if (hostProviders.isEmpty()) {
response.setStatusCode(HttpStatus.SERVICE_UNAVAILABLE);
}
return routeLocator.getRoutes().count();
}
有优雅这样做吗?
【问题讨论】:
-
你不应该写一个
map,然后改用defaultIfEmpty吗?
标签: java spring spring-boot spring-webflux reactor