2016-07-26 8 views
-1

Ich versuche, einen Gesundheitscheck für meine Dienste in Java zu implementieren. Dies verwendet Spring Boot. In dieser Zustandsprüfung habe ich mehrere Dienste, die ich anrufe, und ich muss sicherstellen, dass die Ergebnisse jedes Dienstes NULL sind. Der Rückgabewert jedes Dienstes wird dann in einem Objekt gespeichert, das den Dienstnamen und einen booleschen Wert enthält, ob ein Fehler aufgetreten ist oder nicht. Momentan habe ich dieses Setup auf diese Weise und für mich sieht es sehr hässlich aus. Ich kann mir keinen anderen Weg vorstellen, dies zu implementieren.Korrekter Weg, diese Gesundheitsprüfung in Java durchzuführen?

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

Es wäre etwas anderes sein, das diese Funktion aufruft, die neben ihnen alle Dienste und deren Status in einer Liste mit einem grünen Häkchen zeigen wird, wenn der Fehler falsch ist.

Ich habe über die Verwendung von Behauptungen gedacht, aber das würde das Programm stoppen, wenn es einen Fehler mit der Assert gab. Ich muss das Ergebnis eines Aufrufs als wahr oder falsch speichern und das hängt davon ab, ob das Objekt null ist oder nicht. Anders als 3 verschiedene try catch-Anweisungen zu verwenden, was ist eine andere Möglichkeit, dies zu tun?

Antwort

1

Da dies Spring Boot ist, möchten Sie sich wahrscheinlich mit dem Spring Boot Actuator vertraut machen (der speziell für diesen Anwendungsfall entwickelt wurde). Die hier vorgeschlagene Struktur ist ein bisschen komisch - es fühlt sich an, als ob Sie versuchen, Dinge so einzurichten, dass der Dienst seine eigene Gesundheit nicht kennt, aber nicht klar, warum das der Fall ist (ist das ein "Herzschlag") "type scenario? Erstellen von synthetischen" Transaktionen "zum Senden an den Service, weil nicht-synthetisches Volumen niedrig/nicht-kontinuierlich ist?)

Verwandte Themen