Freigeben über


Herstellen einer Verbindung mit einem verwalteten Eureka-Server für Spring in Azure Container Apps

Eureka Server für Spring ist eine Dienstregistrierung, die es Microservices ermöglicht, sich selbst zu registrieren und andere Dienste zu entdecken. Eureka Server für Spring ist als Azure Container Apps Komponente verfügbar. Sie können Ihre Container-App für Spring an den Eureka Server binden, um eine automatische Registrierung beim Eureka-Server zu ermöglichen.

In diesem Tutorial lernen Sie Folgendes:

  • Erstellen Sie einen Eureka-Server für die Spring Java-Komponente.
  • Binden Sie Ihre Container-App an den Eureka-Server für Spring Java Komponente.

Wichtig

In diesem Lernprogramm werden Dienste verwendet, die sich auf Ihre Azure Rechnung auswirken können. Wenn Sie sich entscheiden, die Schritte mitzumachen, stellen Sie sicher, dass Sie die in diesem Artikel vorgestellten Ressourcen wieder löschen, um unerwartete Rechnungen zu vermeiden.

Voraussetzungen

Überlegungen

Beachten Sie bei der Ausführung des Eureka Servers für Spring-Anwendungen in Container Apps die folgenden Details:

Artikel Erklärung
Umfang Die Komponente vom Typ „Eureka Server für Spring“ wird in der gleichen Umgebung ausgeführt wie die verbundene Container-App.
Skalieren Die Eureka Server für Spring-Komponente ist nicht skalierbar. Die Skalierungseigenschaften minReplicas und maxReplicas sind beide auf 1. Um eine hohe Verfügbarkeit zu erreichen, lesen Sie Erstellen eines hoch verfügbaren Eureka Service in Container Apps.
Ressourcen Die Containerressourcenzuordnung für Eureka Server für Spring ist vorgegeben. Die Anzahl der CPU-Kerne ist 0.5, und die Arbeitsspeichergröße ist 1 Gi.
Preise Die Abrechnung des Eureka Servers für Spring erfolgt auf Basis des Verbrauchs. Ressourcen, die von verwalteten Java-Komponenten verbraucht werden, werden zu den aktiven/Leerlauftarifen abgerechnet. Sie können Komponenten löschen, die nicht mehr zum Beenden der Abrechnung verwendet werden.
Bindung Container-Apps stellen über eine Bindung eine Verbindung mit einer Komponente vom Typ „Eureka Server für Spring“ her. Die Bindungen injizieren Konfigurationen in die Container-App-Umgebungsvariablen. Nachdem eine Bindung eingerichtet wurde, kann die Container-App die Konfigurationswerte aus Umgebungsvariablen lesen und eine Verbindung mit Eureka Server für die Spring-Komponente herstellen.

Einrichtung

Bevor Sie mit dem Eureka Server für die Spring-Komponente arbeiten, müssen Sie zuerst die erforderlichen Ressourcen erstellen.

Führen Sie die folgenden Befehle aus, um Ihre Ressourcengruppe in einer Container-App-Umgebung zu erstellen.

  1. Erstellen Sie Variablen, um Ihre Anwendungskonfiguration zu unterstützen. Diese Werte werden Ihnen im Rahmen dieser Lerneinheit bereitgestellt.

    export LOCATION=eastus
    export RESOURCE_GROUP=my-services-resource-group
    export ENVIRONMENT=my-environment
    export EUREKA_COMPONENT_NAME=eureka
    export APP_NAME=my-eureka-client
    export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-eureka-client:latest"
    
    Variable Beschreibung
    LOCATION Der standort Azure Region, an dem Sie Ihre Container-App und Java Komponente erstellen.
    ENVIRONMENT Der Name der Container-App-Umgebung für Ihre Demoanwendung.
    RESOURCE_GROUP Der Azure Ressourcengruppenname für Ihre Demoanwendung.
    EUREKA_COMPONENT_NAME Der Name der für Ihre Container-App erstellten Java Komponente. In diesem Fall erstellen Sie einen Eureka-Server für Spring Java Komponente.
    IMAGE Das containerimage, das in Ihrer Container-App verwendet wird.
  2. Melden Sie sich mit dem Azure CLI bei Azure an.

    az login
    
  3. Erstellen Sie eine Ressourcengruppe.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. Erstellen Sie die Container-App-Umgebung.

    az containerapp env create \
      --name $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION
    

Erstellen der Eureka-Server für Spring Java-Komponente

Nachdem Sie nun über eine vorhandene Umgebung verfügen, können Sie Ihre Container-App erstellen und an eine Java Komponenteninstanz von Eureka Server for Spring binden.

  1. Erstellen Sie den Eureka-Server für die Spring Java-Komponente.

    az containerapp env java-component eureka-server-for-spring create \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $EUREKA_COMPONENT_NAME
    
  2. Optional: Aktualisieren Sie den Eureka-Server für die Komponentenkonfiguration von Spring Java.

    az containerapp env java-component eureka-server-for-spring update \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $EUREKA_COMPONENT_NAME
        --configuration eureka.server.renewal-percent-threshold=0.85 eureka.server.eviction-interval-timer-in-ms=10000
    

Binden der Containeranwendung an den Eureka-Server für die Spring-Java-Komponente

  1. Erstellen Sie die Container-App, und binden Sie sie an den Eureka-Server für die Spring-Komponente.

    az containerapp create \
        --name $APP_NAME \
        --resource-group $RESOURCE_GROUP \
        --environment $ENVIRONMENT \
        --image $IMAGE \
        --min-replicas 1 \
        --max-replicas 1 \
        --ingress external \
        --target-port 8080 \
        --bind $EUREKA_COMPONENT_NAME \
        --query properties.configuration.ingress.fqdn
    
  2. Kopieren Sie die URL Ihrer App in einen Text-Editor, damit Sie sie in einem der anstehenden Schritte verwenden können.

Kehren Sie zur Container-App im Portal zurück. Kopieren Sie die URL Ihrer App in einen Text-Editor, damit Sie sie in einem der anstehenden Schritte verwenden können.

Navigieren Sie zur Route /allRegistrationStatus, um alle Anwendungen anzuzeigen, die beim Eureka Server für Spring-Komponenten registriert sind.

Die Bindung fügt mehrere Konfigurationen als Umgebungsvariablen in die Anwendung ein, in erster Linie die eureka.client.service-url.defaultZone Eigenschaft. Diese Eigenschaft gibt den internen Endpunkt der Eureka Server-Java-Komponente an.

Die Bindung fügt auch die folgenden Eigenschaften ein:

"eureka.client.register-with-eureka":    "true"
"eureka.client.fetch-registry":          "true"
"eureka.instance.prefer-ip-address":     "true"

Die eureka.client.register-with-eureka-Eigenschaft wird auf true festgelegt, um die Registrierung beim Eureka-Server zu erzwingen. Diese Registrierung überschreibt die lokale Einstellung in application.properties, vom Konfigurationsserver usw. Wenn Sie sie falseauf festlegen möchten, können Sie sie überschreiben, indem Sie eine Umgebungsvariable in Ihrer Container-App festlegen.

Die eureka.instance.prefer-ip-address-Eigenschaft wird aufgrund der spezifischen Systemauflösungsregel für Domänennamen in der Container-App-Umgebung auf true festgelegt. Ändern Sie diesen Wert nicht, sodass Sie die Bindung nicht unterbrechen.

Optional: Trennen Sie Ihre Container-App vom Eureka-Server für die Spring Java-Komponente.

Verwenden Sie die Option --unbind, um eine Bindung aus einer Container-App zu entfernen.

az containerapp update \
    --name $APP_NAME \
    --unbind $JAVA_COMPONENT_NAME \
    --resource-group $RESOURCE_GROUP

Anzeigen der Anwendung über ein Dashboard

Wichtig

Um das Dashboard anzuzeigen, müssen Sie mindestens über die Microsoft.App/managedEnvironments/write Rolle verfügen, die Ihrem Konto in der Ressource für die verwaltete Umgebung zugewiesen ist. Sie können die Owner- oder Contributor-Rolle auf der Ressource explizit zuweisen. Sie können auch die Schritte ausführen, um eine benutzerdefinierte Rollendefinition zu erstellen und sie Ihrem Konto zuzuweisen.

Hinweis

Das Dashboard ist in Azure, betrieben von 21Vianet, nicht verfügbar.

  1. Erstellen Sie eine Definition einer benutzerdefinierten Rolle.

    az role definition create --role-definition '{
        "Name": "<YOUR_ROLE_NAME>",
        "IsCustom": true,
        "Description": "Can access managed Java Component dashboards in managed environments",
        "Actions": [
            "Microsoft.App/managedEnvironments/write"
        ],
        "AssignableScopes": ["/subscriptions/<SUBSCRIPTION_ID>"]
    }'
    

    Stellen Sie sicher, dass Sie den Platzhalter <SUBSCRIPTION_ID> im Wert AssignableScopes durch Ihre Abonnement-ID ersetzen.

  2. Weisen Sie Ihrem Konto die benutzerdefinierte Rolle in der Ressource einer verwalteten Umgebung zu.

    Rufen Sie die Ressourcen-ID der verwalteten Umgebung ab:

    export ENVIRONMENT_ID=$(az containerapp env show \
        --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    
  3. Weisen Sie Ihrem Konto die Rolle zu.

    Ersetzen Sie vor dem Ausführen dieses Befehls die Platzhalter, die durch die <>-Klammern angegeben sind, durch Ihre Benutzer- oder Dienstprinzipal-ID und ihren Rollennamen.

    az role assignment create \
        --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \
        --role "<ROLE_NAME>" \
        --scope $ENVIRONMENT_ID
    

    Hinweis

    Der Wert <USER_OR_SERVICE_PRINCIPAL_ID> sollte in der Regel die Identität sein, die Sie für den Zugriff auf das Azure-Portal verwenden. Der <ROLE_NAME>-Wert ist der Name, den Sie in Schritt 1 zugewiesen haben.

  4. Rufen Sie die URL des Dashboards „Eureka-Server für Spring“ ab.

    az containerapp env java-component eureka-server-for-spring show \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $EUREKA_COMPONENT_NAME \
        --query properties.ingress.fqdn \
        --output tsv
    

    Dieser Befehl gibt die URL zurück, die Sie für den Zugriff auf das Dashboard „Eureka Server für Spring“ verwenden können. Mit dem Dashboard können Sie auch Ihre Container-App sehen, wie im folgenden Screenshot dargestellt.

    Screenshot des Eureka Servers für das Spring-Dashboard.

Optional: Integrieren des Eureka-Servers für Spring und Admin für Spring Java-Komponenten

Wenn Sie den Eureka-Server für Spring und den Administrator für Spring Java Komponenten integrieren möchten, lesen Sie Integrieren des verwalteten Administrators für Spring mit Eureka Server für Spring.

Bereinigen von Ressourcen

Die in diesem Tutorial erstellten Ressourcen wirken sich auf Ihre Azure-Rechnung aus. Führen Sie den folgenden Befehl aus, um alle in diesem Tutorial von Ihnen erstellten Ressourcen zu entfernen, wenn Sie diese Dienste nicht langfristig verwenden werden.

az group delete --resource-group $RESOURCE_GROUP

Liste der zulässigen Konfigurationen für Eureka Server für Spring

In den folgenden Abschnitten werden die unterstützten Konfigurationen beschrieben. Weitere Informationen finden Sie unter Spring Cloud Eureka Server.

Hinweis

Sie können Supporttickets für neue Featureanfragen übermitteln.

Konfigurationsoptionen

Der az containerapp update-Befehl verwendet den --configuration-Parameter, um zu steuern, wie der Eureka Server für Spring konfiguriert ist. Sie können mehrere Parameter gleichzeitig verwenden, solange sie durch ein Leerzeichen getrennt sind. Weitere Informationen finden Sie unter Spring Cloud Eureka Server.

Die folgenden Konfigurationseinstellungen sind in der eureka.server-Konfigurationseigenschaft verfügbar:

Name Beschreibung Standardwert
eureka.server.enable-self-preservation Wenn diese Option aktiviert ist, verfolgt der Server die Anzahl der Erneuerungen, die er vom Server erhalten soll. Wenn die Anzahl der Verlängerungen unterhalb des Schwellenwerts liegt, wie durch eureka.server.renewal-percent-threshold definiert. Der Standardwert wird auf true im ursprünglichen Eureka-Server festgelegt, in der Eureka Server-Java Komponente wird der Standardwert jedoch auf false festgelegt. Siehe Limitations of Eureka Server for Spring Java component. false
eureka.server.renewal-percent-threshold Der Mindestanteil der von den Clients erwarteten Erneuerungen in der von eureka.server.renewal-threshold-update-interval-ms festgelegten Periode. Wenn die Verlängerungen unter den Schwellenwert fallen, werden die Ablaufvorgänge deaktiviert, wenn eureka.server.enable-self-preservation aktiviert ist. 0.85
eureka.server.renewal-threshold-update-interval-ms Das Intervall, mit dem der Schwellenwert (wie in eureka.server.renewal-percent-threshold angegeben) aktualisiert werden muss. 0
eureka.server.expected-client-renewal-interval-seconds Das Intervall, in dem von den Clients erwartet wird, dass sie ihre Heartbeats senden. Der Standardwert beträgt 30 Sekunden. Wenn Clients Heartbeats mit unterschiedlicher Häufigkeit senden, z. B. alle 15 Sekunden, sollte dieser Parameter entsprechend angepasst werden, andernfalls funktioniert die Selbsterhaltung nicht wie erwartet. 30
eureka.server.response-cache-auto-expiration-in-seconds Ruft die Dauer ab, für die die Registry-Payload im Cache aufbewahrt werden soll, wenn sie nicht durch Änderungsereignisse ungültig gemacht wird. 180
eureka.server.response-cache-update-interval-ms Ruft das Zeitintervall ab, in dem der Nutzdaten-Cache des Clients aktualisiert werden sollte. 0
eureka.server.use-read-only-response-cache Der com.netflix.eureka.registry.ResponseCache verwendet aktuell eine zweistufige Zwischenspeicherungsstrategie für Antworten. Ein readWrite-Cache mit einer Ablaufrichtlinie und ein readonly-Cache, der ohne Ablauf zwischenspeichert. true
eureka.server.disable-delta Überprüft, ob dem Client die Delta-Informationen bereitgestellt werden oder nicht. false
eureka.server.retention-time-in-m-s-in-delta-queue Ruft die Zeit ab, für die die Deltainformationen zwischengespeichert werden sollten, damit die Clients den Wert abrufen können, ohne ihn zu verpassen. 0
eureka.server.delta-retention-timer-interval-in-ms Ermitteln Sie das Zeitintervall, mit dem die Bereinigungsaufgabe aufwachen soll, um auf veraltete Deltainformationen zu überprüfen. 0
eureka.server.eviction-interval-timer-in-ms Ermittelt das Zeitintervall, in dem die Aufgabe, deren Instanzen ablaufen, aufwachen und ausgeführt werden soll. 60000
eureka.server.sync-when-timestamp-differs Prüft, ob Instanzen synchronisiert werden sollen, wenn sich die Zeitstempel unterscheiden. true
eureka.server.rate-limiter-enabled Zeigt an, ob der Ratenbegrenzer aktiviert oder deaktiviert werden soll. false
eureka.server.rate-limiter-burst-size Eigenschaft der Ratenbegrenzung, Token-Bucket-Algorithmus. 10
eureka.server.rate-limiter-registry-fetch-average-rate Eigenschaft der Ratenbegrenzung, Token-Bucket-Algorithmus. Gibt die durchschnittliche erzwungene Anforderungsrate an. 500
eureka.server.rate-limiter-privileged-clients Eine Liste von zertifizierten Kunden, die zusätzlich zu standardmäßigen Eureka-Java-Kunden sind. N/A
eureka.server.rate-limiter-throttle-standard-clients Zeigt an, ob für Standardclients eine Ratenbegrenzung angewendet wird. Bei false gilt die Ratenbegrenzung nur für nicht-Standardclients. false
eureka.server.rate-limiter-full-fetch-average-rate Eigenschaft der Ratenbegrenzung, Token-Bucket-Algorithmus. Gibt die durchschnittliche erzwungene Anforderungsrate an. 100

Häufig verwendete Konfigurationen

  • Konfigurationen im Zusammenhang mit der Protokollierung:
    • logging.level.*
    • logging.group.*
    • Alle anderen Konfigurationen unter dem logging.*-Namespace sollten verboten sein, z. B. das Schreiben von Protokolldateien mithilfe der Verwendung von logging.file.

Aufruf zwischen Anwendungen

In diesem Beispiel wird gezeigt, wie Sie Java Code schreiben, um zwischen Anwendungen aufzurufen, die mit der Eureka Server for Spring-Komponente registriert sind. Wenn Container-Apps mit Eureka verbunden sind, kommunizieren sie untereinander über den Eureka-Server.

Das Beispiel erstellt zwei Anwendungen, einen Anrufer und einen Angerufenen. Beide Anwendungen kommunizieren miteinander mithilfe der Eureka Server for Spring-Komponente. Die aufgerufene Anwendung stellt einen Endpunkt zur Verfügung, der von der aufrufenden Anwendung aufgerufen wird.

  1. Erstellen Sie die aufgerufene Anwendung. Aktivieren Sie den Eureka-Client in Ihrer Spring Boot-Anwendung, indem Sie der Klasse „main“ die Anmerkung @EnableDiscoveryClient hinzufügen.

    @SpringBootApplication
    @EnableDiscoveryClient
    public class CalleeApplication {
      public static void main(String[] args) {
        SpringApplication.run(CalleeApplication.class, args);
      }
    }
    
  2. Erstellen Sie einen Endpunkt in der aufgerufenen Anwendung, der von der aufrufenden Anwendung aufgerufen wird.

    @RestController
    public class CalleeController {
    
        @GetMapping("/call")
        public String calledByCaller() {
            return "Hello from Application callee!";
        }
    }
    
  3. Setzen Sie den Namen der Zielanwendung in der Anwendungskonfigurationsdatei - etwa in application.yml - fest.

    spring.application.name=callee
    
  4. Erstellen Sie die aufrufende Anwendung.

    Fügen Sie die Anmerkung @EnableDiscoveryClient hinzu, um die Clientfunktionen von Eureka zu aktivieren. Erstellen Sie außerdem eine WebClient.Builder-Bean mit der Anmerkung @LoadBalanced, um Lastenausgleichsaufrufe an andere Dienste auszuführen.

    @SpringBootApplication
    @EnableDiscoveryClient
    public class CallerApplication {
      public static void main(String[] args) {
        SpringApplication.run(CallerApplication.class, args);
      }
    
      @Bean
      @LoadBalanced
      public WebClient.Builder loadBalancedWebClientBuilder() {
        return WebClient.builder();
      }
    }
    
  5. Erstellen Sie in der aufrufenden Anwendung einen Controller, der WebClient.Builder verwendet, um die aufgerufene Anwendung mithilfe des Anwendungsnamens „callee“ aufzurufen.

    @RestController
    public class CallerController {
        @Autowired
        private WebClient.Builder webClientBuilder;
    
        @GetMapping("/call-callee")
        public Mono<String> callCallee() {
            return webClientBuilder.build()
                .get()
                .uri("http://callee/call")
                .retrieve()
                .bodyToMono(String.class);
        }
    }
    

Jetzt verfügen Sie über eine Anrufer- und Angerufene-Anwendung, die mit Eureka Server für Spring Java-Komponenten miteinander kommunizieren. Stellen Sie sicher, dass beide Anwendungen ausgeführt und an den Eureka-Server gebunden werden, bevor Sie den Endpunkt /call-callee in der aufrufenden Anwendung testen.

Begrenzungen

  • Die Eureka Server-Java-Komponente enthält eine Standardkonfiguration, eureka.server.enable-self-preservation, die auf false festgelegt ist. Diese Standardkonfiguration hilft zu vermeiden, dass Instanzen nach der Aktivierung der Selbsterhaltung nicht gelöscht werden. Wenn Instanzen zu früh gelöscht werden, könnten einige Anforderungen an nicht existierende Instanzen weitergeleitet werden. Wenn Sie diese Einstellung in true ändern möchten, können Sie sie überschreiben, indem Sie ihre eigenen Konfigurationen in der Java Komponente festlegen.
  • Das Eureka-Dashboard ist in Azure von 21Vianet nicht verfügbar.

Nächste Schritte

Integrieren des verwalteten Administrators für Spring in Eureka Server für Spring