在Java中执行此运行状况检查的正确方法?

时间:2016-07-26 16:31:33

标签: java

我正在尝试使用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语句之外,还有另一种方法吗?

1 个答案:

答案 0 :(得分:1)

因为这是Spring Boot,所以你可能想要熟悉一下Spring Boot Actuator(专为这个用例而构建)。这里提出的结构有点奇怪 - 感觉就像你试图设置这样的服务不知道它自己的健康,但不清楚为什么会是这种情况(这是一个“心跳” “类型场景?创建合成”交易“以发送到服务,因为非合成量低/不连续?)