我正在尝试使用Java实现服务的运行状况检查。这是使用Spring Boot。在这个运行状况检查中,我有多个服务,我调用,我需要确保每个服务的结果为NULL。然后将每个服务的返回值存储到一个对象中,该对象包括服务名称和是否发生错误的布尔值。目前,我有这样的设置,对我而言,它看起来非常难看。我想不出另一种方法来实现它。
Public HealthCargo() {
string service_name;
boolean error;
}
@Resource(name = "AService")
private AService aService;
@Resource(name = "BService")
private BService bService;
@Resource(name = "CService")
private CService cService;
@RequestMapping(method = RequestMethod.GET, value = "/healthcheck", produces = {MediaType.APPLICATION_JSON_VALUE})
@ResponseBody
public List<HealthCargo> healthcheck() {
List<HealthCargo> checks = new ArrayList<>();
boolean error = true;
SomeCargoA someCargoA = new SomeCargoA();
SomeCargoB someCargoB = new SomeCargoB();
try {
someCargoA = aService.fetch("182731");
if (someCargoA == NULL)
error = false;
} catch (Exception e) {
} finally {
checks.add(New HealthCargo("aService", error));
}
error = true;
try {
someCargoB = bService.fetch("182731");
if (someCargoB == NULL)
error = false;
} catch (Exception e) {
} finally {
checks.add(New HealthCargo("bService", error));
}
error = true;
.... // Similar logic for service C
return checks;
}
如果错误为假,还会有其他调用此函数的内容,它会在列表中显示所有服务及其状态,并在旁边显示绿色复选标记。
我已经考虑过使用断言,但如果断言出错,那就会停止程序。我需要将调用的结果存储为true或false,这取决于对象是否为null。除了使用3个不同的try catch语句之外,还有另一种方法吗?
答案 0 :(得分:1)
因为这是Spring Boot,所以你可能想要熟悉一下Spring Boot Actuator(专为这个用例而构建)。这里提出的结构有点奇怪 - 感觉就像你试图设置这样的服务不知道它自己的健康,但不清楚为什么会是这种情况(这是一个“心跳” “类型场景?创建合成”交易“以发送到服务,因为非合成量低/不连续?)