Freigeben über


Tutorial: 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 zur automatischen Registrierung beim Eureka-Server an Eureka Server binden.

In diesem Tutorial lernen Sie Folgendes:

  • Erstellen Sie eine Java-Komponente vom Typ „Eureka Server für Spring“.
  • Binden Sie Ihre Container-App an die Java-Komponente „Eureka Server für Spring“.

Wichtig

In diesem Tutorial 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 in Eureka Server für Spring in Container Apps die folgenden Details:

Artikel Erklärung
`Scope` Die Komponente vom Typ „Eureka Server für Spring“ wird in der gleichen Umgebung ausgeführt wie die verbundene Container-App.
Skalieren Der Eureka Server für Spring kann nicht skaliert werden. 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 beträgt 0,5, und die Speichergröße beträgt 1 Gi.
Preise Die Abrechnung für Eureka Server für Spring ist verbrauchsabhängig. Ressourcen, die von verwalteten Java-Komponenten verbraucht werden, werden in den Aktiven/Leerlaufraten abgerechnet. Sie können Komponenten löschen, die nicht mehr zum Beenden der Abrechnung verwendet werden.
Binding Container-Apps stellen über eine Bindung eine Verbindung mit einer Komponente vom Typ „Eureka Server für Spring“ her. Die Bindungen enthalten Konfigurationen in 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.

Setup

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 der Azure-Region, an dem Sie Ihre Container-App und die Java-Komponente erstellen
    ENVIRONMENT Der Name der Container-App-Umgebung für Ihre Demoanwendung.
    RESOURCE_GROUP Der Name der Azure-Ressourcengruppe für Ihre Demoanwendung
    EUREKA_COMPONENT_NAME Der Name der für Ihre Container-App erstellten Java-Komponente. In diesem Fall erstellen Sie eine Java-Komponente vom Typ „Eureka Server für Spring“.
    IMAGE Das containerimage, das in Ihrer Container-App verwendet wird.
  2. Melden Sie sich über die Azure-Befehlszeilenschnittstelle 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 Java-Komponente „Eureka Server für Spring“

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

  1. Erstellen Sie die Java-Komponente vom Typ „Eureka Server für Spring“

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

    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 Ihrer Container-App an die Java-Komponente „Eureka Server für Spring“

  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 festgelegt, um die Registrierung mit dem Eureka-Server zu true 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: Aufheben der Bindung zwischen Container-App und der Java-Komponente von Eureka Server für Spring

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 die Microsoft.App/managedEnvironments/write-Rolle Ihrem Konto in der Ressource der verwalteten Umgebung zugewiesen haben. 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.

  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 <USER_OR_SERVICE_PRINCIPAL_ID>-Wert 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 der Java-Komponenten „Eureka Server für Spring“ und „Administrator für Spring“

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

Bereinigen von Ressourcen

Die in diesem Tutorial erstellten Ressourcen wirken sich auf Ihre Azure-Abrechnung 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

Bitte erstellen Sie für neue Featureanforderungen Supporttickets.

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. Jedes Mal, wenn die Anzahl der Erneuerungen unter den von eureka.server.renewal-percent-threshold festgelegten Schwellenwert fällt. Im ursprünglichen Eureka-Server ist der Standardwert auf true festgelegt, aber in der Eureka Server-Java-Komponente ist der Standardwert auf false festgelegt. Weitere Informationen finden Sie unter Einschränkungen bei Java-Komponenten von Eureka Server für Spring. 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 Clients ihre Heartbeats senden sollen. Der Standardwert beträgt 30 Sekunden. Wenn die Clients Heartbeats mit unterschiedlicher Frequenz senden, z. B. alle 15 Sekunden, sollte dieser Parameter entsprechend angepasst werden, da sonst die Selbsterhaltung nicht wie erwartet funktioniert. 30
eureka.server.response-cache-auto-expiration-in-seconds Ruft die Zeit ab, für die die Nutzdaten der Registrierung im Cache gehalten werden sollten, wenn sie nicht durch Änderungsereignisse ungültig gemacht werden. 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 Ermittelt das Zeitintervall, in dem die Aufgabe „Aufräumen“ aufwachen und auf abgelaufene Deltainformationen überprüfen soll. 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 Ratenbegrenzer, Token Bucket-Algorithmus. 10
eureka.server.rate-limiter-registry-fetch-average-rate Eigenschaft Ratenbegrenzer, Token Bucket-Algorithmus. Gibt die durchschnittliche erzwungene Anforderungsrate an. 500
eureka.server.rate-limiter-privileged-clients Eine Liste der zertifizierten Clients. Dies ist zusätzlich zu standardmäßigen Eureka Java-Clients. N/A
eureka.server.rate-limiter-throttle-standard-clients Zeigt an, ob für Standardclients eine Ratenbegrenzung gilt. Bei false gilt die Ratenbegrenzung nur für nicht-Standardclients. false
eureka.server.rate-limiter-full-fetch-average-rate Eigenschaft Ratenbegrenzer, 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 erfahren Sie, wie Sie Java-Code für den Aufruf zwischen Anwendungen schreiben, die bei der Eureka Server für Spring-Komponente registriert sind. Wenn Container-Apps mit Eureka verbunden sind, kommunizieren sie untereinander über den Eureka-Server.

Das Beispiel erstellt zwei Anwendungen, eine aufrufende und eine aufgerufene. Beide Anwendungen kommunizieren untereinander mithilfe der Eureka Server für 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. Legen Sie den Namen der angerufenen Anwendung in der Anwendungskonfigurationsdatei fest, z. B. als application.yml.

    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 aufrufende und eine aufgerufene Anwendung, die über Java-Komponenten von Eureka Server für Spring 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 Java-Komponente Eureka Server 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 auf true ändern möchten, können Sie sie überschreiben, indem Sie Ihre eigenen Konfigurationen in der Java-Komponente festlegen.

Nächste Schritte

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