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
- Ein Azure-Konto mit einem aktiven Abonnement. Sollten Sie noch nicht über ein Konto verfügen, können Sie ein kostenloses Konto erstellen.
- Azure-Befehlszeilenschnittstelle.
Ü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. |
Skalierung | 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.
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. Melden Sie sich über die Azure-Befehlszeilenschnittstelle bei Azure an.
az login
Erstellen Sie eine Ressourcengruppe.
az group create --name $RESOURCE_GROUP --location $LOCATION
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.
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
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“
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
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 false
auf 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.
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 WertAssignableScopes
durch 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_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.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.
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 vonlogging.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.
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); } }
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!"; } }
Legen Sie den Namen der angerufenen Anwendung in der Anwendungskonfigurationsdatei fest, z. B. als application.yml.
spring.application.name=callee
Erstellen Sie die aufrufende Anwendung.
Fügen Sie die Anmerkung
@EnableDiscoveryClient
hinzu, 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.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
Zugehöriger Inhalt
Integrieren des verwalteten Administrators für Spring in Eureka Server für Spring