[JAVA] Lassen Sie uns einen Leistungsschalter für den Backend-Service mit Actuator of Spring Boot (Teil 1) herstellen.

Voraussetzungen

Bei der Entwicklung eines Systems kann es vorkommen, dass Leute sagen: "Selbst wenn der Backend-Dienst ausfällt und einen Fehler zurückgibt, sollte er gut funktionieren, damit das gesamte System nicht instabil wird." richtig?

In einem solchen Fall ist es schwierig, selbst über den Betrieb nachzudenken. Daher habe ich mit der Möglichkeit experimentiert, die Spring Boot-Funktion zu verwenden, um daraus einen Leistungsschalter zu machen.

Am Ende möchte ich, dass es unter AWS gut funktioniert, aber die erste Hälfte hängt von der Implementierungsmethode ab.

Vorbereitung für den Spring Boot

Derzeit ist es gut, wenn es mit einem Minimum als Webanwendung funktioniert. Erstellen Sie daher ein leeres Starterprojekt aus der Vorlage.

Legen Sie zusätzlich zur Standardeinstellung die folgenden Abhängigkeiten in pom.xml fest.

pom.xml


    <dependencies>
        ……
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        ……
    </dependencies>

RestController ist nicht der Hauptteil dieser Zeit, daher ist es ein Lehrbuch. Mit der minimalen Konfiguration sieht es wie folgt aus.

WebController.java


package com.example;
 
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
public class WebController {
 
  @RequestMapping("/hello")
  public String hello() {
    return "hello()";
  }
   
}

Zusätzliche Definition der Integritätsprüfung für den Backend-Service

Von hier aus Spring Boot Documentation Während des Lesens.

Registrieren Sie die Integritätsprüfung für den Backend-Service als benutzerdefinierte Integritätsprüfung. Dieses Mal experimentiere ich mit dem Backend-Service als Lambda-Funktion zur einfachen Steuerung, sodass Lambda im Namen des Gesundheitschecks enthalten ist, aber wenn Sie ihn in einen beliebigen Namen ändern können.

Implementieren Sie die Health Indicator-Schnittstelle wie folgt. Auf diese Weise scheint es, dass es beim Start automatisch in der Bean registriert wird. Ich verstehe den detaillierten Mechanismus nicht. Ich muss richtig lernen.

LambdaHealthIndicator.java


package com.example;

import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.stereotype.Component;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.IOException;

@Component
public class LambdaHealthIndicator implements HealthIndicator {

  @Override
  public Health health() {
    int statusCode = check();
    if (statusCode != HttpURLConnection.HTTP_OK) {
      return Health.down().withDetail("HTTP Request Error", statusCode).build();
    } else {
      return Health.up().withDetail("HTTP Request Success", statusCode).build();
    }
  }
    
  private int check(){
    String strUrl = "Lambda-Funktion hängt ALB/NLB/API-Gateway-URL";
    URL url = null;
    HttpURLConnection  urlConn = null;
    int statusCode = 200;

    try {
      url = new URL(strUrl);
      urlConn = (HttpURLConnection) url.openConnection();
      urlConn.setRequestMethod("GET");
      urlConn.connect();
      statusCode = urlConn.getResponseCode();	
    } catch (IOException e) {
      e.printStackTrace();
      statusCode = 503;
    } finally {
      if (urlConn != null) {
        urlConn.disconnect();
      }
    }
    return statusCode;
  }
}

Übrigens allein damit in der Standardanzeige von Acutuator, auch wenn Sie auf `` `/ actuator / health``` zugreifen

{"status":"UP"}

Ich werde nur zurückkehren. Die Anwendungseigenschaften müssen wie folgt bearbeitet werden.

application.properties


management.endpoint.health.show-details=always
management.health.defaults.enabled=false
management.health.lambda.enabled=true

In der ersten Zeile können Sie die Details der Integritätsprüfung anzeigen. Wenn die zweite Zeile wahr ist, wird auch Speicherplatz angezeigt und ist schwer zu erkennen. Deaktivieren Sie ihn daher in diesem Artikel. Die dritte Zeile aktiviert den hinzugefügten "LambdaHealthIndicator". Wie in der Dokumentation erwähnt, scheint das Präfix Health Indicator als Einstellung behandelt zu werden.

Versuche zu experimentieren

Wenn Sie die obige App starten und auf `` `http: // localhost: 8080 / actuator / health``` zugreifen

{"status":"UP","components":{"lambda":{"status":"UP","details":{"HTTP Request Success":200}}}}

Wird angezeigt. Wenn Sie hier eine Drosselung (= Reservierung für gleichzeitige Ausführung: 0) über die Einstellung der Lambda-Funktion am Back-End durchführen und diese in einen Zustand versetzen, in dem die 502-Antwort von ALB zurückgegeben wird,

{"status":"DOWN","components":{"lambda":{"status":"DOWN","details":{"HTTP Request Error":502}}}}

Und der Fehler wird richtig erkannt. Wenn Sie den Header mit den Entwicklertools von Chrome überprüfen,

キャプチャ3.PNG

Der Antwortcode lautet ebenfalls 503. Wenn Sie also auf den Gesundheitscheck hier verweisen, können Sie ihn als Leistungsschalter behandeln!

Recommended Posts

Lassen Sie uns einen Leistungsschalter für den Backend-Service mit Actuator of Spring Boot (Teil 1) herstellen.
Erstellen wir eine Buchverwaltungs-Webanwendung mit Spring Boot part1
So erstellen Sie mit SPRING INITIALIZR einen Hinadan für ein Spring Boot-Projekt
Lassen Sie uns mit Spring Boot part3 eine Webanwendung für die Buchverwaltung erstellen
Lassen Sie uns mit Spring Boot part2 eine Webanwendung für die Buchverwaltung erstellen
Erstellen wir eine einfache API mit EC2 + RDS + Spring Boot ①
Lassen Sie uns eine Kommunikationsanwendung in LAN Teil 2 erstellen. Zeigen Sie ein Fenster mit JavaFX an / Warten Sie auf den Socket-Empfang
Schreiben wir einen Testcode für die Anmeldefunktion mit Spring Boot
Java-Anfänger haben versucht, mit Spring Boot eine einfache Webanwendung zu erstellen
WebMvcConfigurer-Memorandum von Spring Boot 2.0 (Spring 5)
Einführung des Spring Boot Actuator, einer Funktion, die die Bedienung von Spring Boot-Anwendungen erleichtert
[FCM] Implementierung der Nachrichtenübertragung mit FCM + Spring Boot
Machen wir eine Shopping-Site mit Streifen! (Kauf)
Erstellen Sie eine Spring Boot-Anwendung mit IntelliJ IDEA
So schreiben Sie einen Komponententest für Spring Boot 2
Lassen Sie uns ein Pseudomodell mit active_hash ~ Präfekturdaten ~ erstellen
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 2
[JUnit 5-kompatibel] Schreiben Sie einen Test mit JUnit 5 mit Spring Boot 2.2, 2.3
[Spring Boot] So erstellen Sie ein Projekt (für Anfänger)
[Java-Grundlagen] Lassen Sie uns ein Dreieck mit einer for-Anweisung erstellen
Lass uns einen Roboter bauen! "Eine einfache Demo von Java AWT Robot"
[Einführung in Spring Boot] Senden Sie ein Formular mit thymeleaf
Ein Memorandum beim Erstellen eines REST-Service mit Spring Boot
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 1