2016-07-26 8 views
-1

Javaで私のサービスのヘルスチェックを実装しようとしています。これはSpring Bootを使用しています。このヘルスチェックでは、私が呼び出す複数のサービスがあり、それぞれのサービスの結果がNULLであることを確認する必要があります。各サービスの戻り値は、サービス名とエラーが発生したかどうかのブール値を含むオブジェクトに格納されます。現在、私はこの方法でこの方法を持っており、私にとっては非常に醜いです。私はこれを実装する別の方法を考えることができません。Javaでこのヘルスチェックを行う正しい方法はありますか?

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; 
} 

エラーがfalseの場合は、それらの横に緑のチェックマークで、リスト内のすべてのサービスとそのステータスを表示します。この関数を呼び出して何か他のものがあるでしょう。

私はアサーションを使用することを考えましたが、アサートにエラーがあった場合はプログラムを停止します。私はtrueまたはfalseと呼び出しの結果を格納する必要があり、オブジェクトがnullであるかどうかによって異なります。 3つの異なるtry catchステートメントを使用する以外に、これを行う別の方法は何ですか?

答えて

1

これはSpring Bootであるため、Spring Boot Actuator(この使用例のために特別に構築されています)を身に付けたいと思うかもしれません。ここで提案されている構造はちょっと変わっていますが、サービスが自分自身の健康を知らないようなものを設定しようとしているように感じますが、それがなぜそうなるのかはっきりしていません(これは "ハートビート"タイプシナリオ?非合成量が少ない/不連続であるためサービスに送信する合成"トランザクション "を作成する)

関連する問題