Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
- Ein Azure Konto mit einem aktiven Abonnement. Wenn Sie noch keines haben, können Sie kostenlos eins erstellen.
- Azure CLI.
Ü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.
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 LOCATIONDer standort Azure Region, an dem Sie Ihre Container-App und Java Komponente erstellen. ENVIRONMENTDer Name der Container-App-Umgebung für Ihre Demoanwendung. RESOURCE_GROUPDer Azure Ressourcengruppenname für Ihre Demoanwendung. EUREKA_COMPONENT_NAMEDer Name der für Ihre Container-App erstellten Java Komponente. In diesem Fall erstellen Sie einen Eureka-Server für Spring Java Komponente. IMAGEDas containerimage, das in Ihrer Container-App verwendet wird. Melden Sie sich mit dem Azure CLI bei Azure an.
az loginErstellen Sie eine Ressourcengruppe.
az group create --name $RESOURCE_GROUP --location $LOCATIONErstellen 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.
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_NAMEOptional: 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
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.fqdnKopieren 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.
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 WertAssignableScopesdurch Ihre Abonnement-ID ersetzen.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)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_IDHinweis
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.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 tsvDieser 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.
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 vonlogging.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.
Erstellen Sie die aufgerufene Anwendung. Aktivieren Sie den Eureka-Client in Ihrer Spring Boot-Anwendung, indem Sie der Klasse „main“ die Anmerkung
@EnableDiscoveryClienthinzufügen.@SpringBootApplication @EnableDiscoveryClient public class CalleeApplication { public static void main(String[] args) { SpringApplication.run(CalleeApplication.class, args); } }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!"; } }Setzen Sie den Namen der Zielanwendung in der Anwendungskonfigurationsdatei - etwa in application.yml - fest.
spring.application.name=calleeErstellen Sie die aufrufende Anwendung.
Fügen Sie die Anmerkung
@EnableDiscoveryClienthinzu, um die Clientfunktionen von Eureka zu aktivieren. Erstellen Sie außerdem eineWebClient.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(); } }Erstellen Sie in der aufrufenden Anwendung einen Controller, der
WebClient.Builderverwendet, 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 auffalsefestgelegt 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 intrueä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
Zugehöriger Inhalt
Integrieren des verwalteten Administrators für Spring in Eureka Server für Spring