Zelfstudie: Verbinding maken met een beheerde Eureka-server voor Spring in Azure Container Apps
Eureka Server voor Spring is een serviceregister waarmee microservices zichzelf kunnen registreren en andere services kunnen detecteren. Eureka Server voor Spring is beschikbaar als een Azure Container Apps-onderdeel. U kunt uw container-app binden aan Eureka Server voor Spring voor automatische registratie met de Eureka-server.
In deze zelfstudie leert u het volgende:
- Maak een Eureka Server voor Spring Java-onderdeel.
- Bind uw container-app aan de Eureka Server voor Spring Java-component.
Belangrijk
In deze zelfstudie worden services gebruikt die van invloed kunnen zijn op uw Azure-factuur. Als u besluit om mee te doen, moet u ervoor zorgen dat u de resources die in dit artikel worden aanbevolen, verwijdert om onverwachte facturering te voorkomen.
Vereisten
- Een Azure-account met een actief abonnement. Als u er nog geen hebt, kunt u er gratis een maken.
- Azure CLI.
Overwegingen
Wanneer u Eureka Server voor Spring in Container Apps uitvoert, moet u rekening houden met de volgende details:
Artikel | Uitleg |
---|---|
Bereik | De Eureka Server voor Spring-component wordt uitgevoerd in dezelfde omgeving als de verbonden container-app. |
Schalen | De Eureka Server voor Spring-component kan niet worden geschaald. De schaaleigenschappen minReplicas en maxReplicas beide zijn ingesteld op 1 . Zie Een maximaal beschikbare Eureka-service maken in Container Apps om hoge beschikbaarheid te bereiken. |
Resources | De toewijzing van containerresources voor Eureka Server voor Spring is opgelost. Het aantal CPU-kernen is 0,5 en de geheugengrootte is 1 Gi. |
Prijzen | De Eureka Server voor Spring-facturering valt onder de prijzen op basis van verbruik. Resources die door beheerde Java-onderdelen worden verbruikt, worden gefactureerd tegen de actieve/niet-actieve tarieven. U kunt onderdelen verwijderen die niet meer worden gebruikt om de facturering te stoppen. |
Binding | Container-apps maken verbinding met een Eureka-server voor Spring-onderdeel via een binding. De bindingen injecteren configuraties in omgevingsvariabelen voor container-apps. Nadat een binding tot stand is gebracht, kan de container-app de configuratiewaarden van omgevingsvariabelen lezen en verbinding maken met de Eureka Server voor Spring-component. |
Instellingen
Voordat u met de Eureka-server voor Spring-onderdeel gaat werken, moet u eerst de vereiste resources maken.
Voer de volgende opdrachten uit om uw resourcegroep te maken in een container-app-omgeving.
Maak variabelen ter ondersteuning van uw toepassingsconfiguratie. Deze waarden worden voor u verstrekt voor de doeleinden van deze les.
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"
Variabele Beschrijving LOCATION
De Azure-regiolocatie waar u uw container-app en Java-onderdeel maakt. ENVIRONMENT
De naam van de container-app-omgeving voor uw demotoepassing. RESOURCE_GROUP
De naam van de Azure-resourcegroep voor uw demotoepassing. EUREKA_COMPONENT_NAME
De naam van het Java-onderdeel dat is gemaakt voor uw container-app. In dit geval maakt u een Eureka Server voor Spring Java-onderdeel. IMAGE
De containerinstallatiekopieën die in uw container-app worden gebruikt. Meld u aan bij Azure met de Azure CLI.
az login
Maak een resourcegroep.
az group create --name $RESOURCE_GROUP --location $LOCATION
Maak uw container-app-omgeving.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
Het Eureka Server-onderdeel voor Spring Java maken
Nu u een bestaande omgeving hebt, kunt u uw container-app maken en deze verbinden met een Java-onderdeelexemplementatie van Eureka Server voor Spring.
Maak het Eureka Server-onderdeel voor Spring Java.
az containerapp env java-component eureka-server-for-spring create \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_NAME
Optioneel: Werk de Eureka-server voor de configuratie van spring Java-onderdelen bij.
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
Uw container-app verbinden met het Eureka Server voor Spring Java-onderdeel
Maak de container-app en bind deze aan de Eureka Server voor Spring-component.
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
Kopieer de URL van uw app naar een teksteditor, zodat u deze in een volgende stap kunt gebruiken.
Ga terug naar de container-app in de portal. Kopieer de URL van uw app naar een teksteditor, zodat u deze in een volgende stap kunt gebruiken.
Ga naar de /allRegistrationStatus
route om alle toepassingen weer te geven die zijn geregistreerd bij de Eureka-server voor springonderdeel.
De binding injecteert verschillende configuraties in de toepassing als omgevingsvariabelen, voornamelijk de eureka.client.service-url.defaultZone
eigenschap. Deze eigenschap geeft het interne eindpunt van het Eureka Server Java-onderdeel aan.
De binding injecteert ook de volgende eigenschappen:
"eureka.client.register-with-eureka": "true"
"eureka.client.fetch-registry": "true"
"eureka.instance.prefer-ip-address": "true"
De eureka.client.register-with-eureka
eigenschap is ingesteld om true
registratie af te dwingen bij de Eureka-server. Deze registratie overschrijft de lokale instelling in application.properties
, van de configuratieserver enzovoort. Als u dit false
wilt instellen, kunt u deze overschrijven door een omgevingsvariabele in te stellen in uw container-app.
De eureka.instance.prefer-ip-address
eigenschap is ingesteld op true
vanwege de specifieke regel voor het omzetten van het domeinnaamsysteem in de container-app-omgeving. Wijzig deze waarde niet zodat u de binding niet onderbreekt.
Optioneel: De container-app losmaken van de Eureka Server voor Spring Java-component
Als u een binding uit een container-app wilt verwijderen, gebruikt u de --unbind
optie.
az containerapp update \
--name $APP_NAME \
--unbind $JAVA_COMPONENT_NAME \
--resource-group $RESOURCE_GROUP
De toepassing weergeven via een dashboard
Belangrijk
Als u het dashboard wilt weergeven, moet u ten minste de Microsoft.App/managedEnvironments/write
rol hebben toegewezen aan uw account in de beheerde omgevingsresource. U kunt de Owner
of Contributor
rol expliciet toewijzen aan de resource. U kunt ook de stappen volgen om een aangepaste roldefinitie te maken en deze toe te wijzen aan uw account.
Maak een aangepaste roldefinitie.
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>"] }'
Zorg ervoor dat u de
<SUBSCRIPTION_ID>
tijdelijke aanduiding in deAssignableScopes
waarde vervangt door uw abonnements-id.Wijs de aangepaste rol toe aan uw account in een beheerde omgevingsresource.
Haal de resource-id van de beheerde omgeving op:
export ENVIRONMENT_ID=$(az containerapp env show \ --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
Wijs de rol toe aan uw account.
Voordat u deze opdracht uitvoert, vervangt u de tijdelijke aanduidingen ( aangegeven door de
<>
vierkante haken ) door uw gebruikers- of service-principal-id en uw rolnaam.az role assignment create \ --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \ --role "<ROLE_NAME>" \ --scope $ENVIRONMENT_ID
Notitie
De
<USER_OR_SERVICE_PRINCIPAL_ID>
waarde moet meestal de identiteit zijn die u gebruikt voor toegang tot Azure Portal. De<ROLE_NAME>
waarde is de naam die u in stap 1 hebt toegewezen.Haal de URL van de Eureka-server voor springdashboard op.
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
Met deze opdracht wordt de URL geretourneerd die u kunt gebruiken voor toegang tot de Eureka-server voor springdashboard. Met het dashboard kunt u ook uw container-app zien, zoals wordt weergegeven in de volgende schermopname.
Optioneel: De Eureka-server voor Spring en Admin voor Spring Java-onderdelen integreren
Als u de Eureka-server voor Spring en de admin for Spring Java-onderdelen wilt integreren, raadpleegt u De beheerde beheerder voor Spring integreren met Eureka Server voor Spring.
Resources opschonen
De resources die in deze zelfstudie zijn gemaakt, hebben een effect op uw Azure-factuur. Als u deze services niet op lange termijn gaat gebruiken, voert u de volgende opdracht uit om alles te verwijderen dat u in deze zelfstudie hebt gemaakt.
az group delete --resource-group $RESOURCE_GROUP
Toegestane configuratielijst voor uw Eureka-server voor Spring
In de volgende secties worden de ondersteunde configuraties beschreven. Zie Spring Cloud Eureka Server voor meer informatie.
Notitie
Dien ondersteuningstickets in voor nieuwe functieaanvragen.
Configuratieopties
De az containerapp update
opdracht gebruikt de --configuration
parameter om te bepalen hoe de Eureka-server voor Spring is geconfigureerd. U kunt meerdere parameters tegelijk gebruiken zolang ze worden gescheiden door een spatie. Zie Spring Cloud Eureka Server voor meer informatie.
De volgende configuratie-instellingen zijn beschikbaar voor de eureka.server
configuratie-eigenschap:
Name | Omschrijving | Default value |
---|---|---|
eureka.server.enable-self-preservation |
Wanneer deze optie is ingeschakeld, houdt de server het aantal vernieuwingen bij dat deze van de server moet ontvangen. Telkens wanneer het aantal verlengingen lager is dan het drempelwaardepercentage zoals gedefinieerd door eureka.server.renewal-percent-threshold . De standaardwaarde is ingesteld true op de oorspronkelijke Eureka-server, maar in het Eureka Server Java-onderdeel is de standaardwaarde ingesteld op false . Zie Beperkingen van Eureka Server voor Spring Java-onderdeel. |
false |
eureka.server.renewal-percent-threshold |
Het minimumpercentage van verlengingen dat wordt verwacht van de clients in de periode die is opgegeven door eureka.server.renewal-threshold-update-interval-ms . Als de verlengingen onder de drempelwaarde vallen, worden de vervaldatums uitgeschakeld als eureka.server.enable-self-preservation deze is ingeschakeld. |
0.85 |
eureka.server.renewal-threshold-update-interval-ms |
Het interval waarmee de drempelwaarde , zoals opgegeven in eureka.server.renewal-percent-threshold - moet worden bijgewerkt. |
0 |
eureka.server.expected-client-renewal-interval-seconds |
Het interval waarmee clients hun heartbeats moeten verzenden. De standaardwaarde is 30 seconden. Als clients heartbeats verzenden met een andere frequentie, bijvoorbeeld om de 15 seconden, moet deze parameter dienovereenkomstig worden afgestemd, anders werkt zelfbehoud niet zoals verwacht. | 30 |
eureka.server.response-cache-auto-expiration-in-seconds |
Hiermee haalt u de tijd op waarvoor de nettolading van het register in de cache moet worden bewaard als deze niet ongeldig wordt gemaakt door wijzigingsgebeurtenissen. | 180 |
eureka.server.response-cache-update-interval-ms |
Hiermee haalt u het tijdsinterval op waarmee de nettoladingcache van de client moet worden bijgewerkt. | 0 |
eureka.server.use-read-only-response-cache |
Op com.netflix.eureka.registry.ResponseCache dit moment wordt een cachestrategie op twee niveaus gebruikt voor antwoorden. Een readWrite cache met een verloopbeleid en een readonly cache die zonder verlooptijd in de cache wordt opgeslagen. |
true |
eureka.server.disable-delta |
Controleert of de deltagegevens wel of niet aan de client kunnen worden geleverd. | false |
eureka.server.retention-time-in-m-s-in-delta-queue |
Haal de tijd op waarvoor de deltagegevens in de cache moeten worden opgeslagen voor de clients om de waarde op te halen zonder deze te missen. | 0 |
eureka.server.delta-retention-timer-interval-in-ms |
Haal het tijdsinterval op waarmee de opschoningstaak moet worden geactiveerd en controleer op verlopen deltagegevens. | 0 |
eureka.server.eviction-interval-timer-in-ms |
Haal het tijdsinterval op waarmee de taak die verloopt, moet worden geactiveerd en uitgevoerd. | 60000 |
eureka.server.sync-when-timestamp-differs |
Controleert of exemplaren moeten worden gesynchroniseerd wanneer de tijdstempel verschilt. | true |
eureka.server.rate-limiter-enabled |
Hiermee wordt aangegeven of de snelheidsbegrenzer moet worden ingeschakeld of uitgeschakeld. | false |
eureka.server.rate-limiter-burst-size |
Snelheidsbegrenzer, eigenschap van tokenbucketalgoritmen. | 10 |
eureka.server.rate-limiter-registry-fetch-average-rate |
Snelheidsbegrenzer, eigenschap van tokenbucketalgoritmen. Hiermee geeft u het gemiddelde afgedwongen aanvraagtarief op. | 500 |
eureka.server.rate-limiter-privileged-clients |
Een lijst met gecertificeerde klanten. Dit is naast standaard Eureka Java-clients. | N/A |
eureka.server.rate-limiter-throttle-standard-clients |
Geef aan of standaardclients voor frequentielimieten worden gebruikt. Als dit is ingesteld op false , zijn alleen niet-standaardclients beperkt. |
false |
eureka.server.rate-limiter-full-fetch-average-rate |
Snelheidsbegrenzer, eigenschap van tokenbucketalgoritmen. Hiermee geeft u het gemiddelde afgedwongen aanvraagtarief op. | 100 |
Algemene configuraties
- Gerelateerde configuraties voor logboekregistratie:
logging.level.*
logging.group.*
- Alle andere configuraties onder de
logging.*
naamruimte moeten verboden zijn, bijvoorbeeld het schrijven van logboekbestanden met behulplogging.file
van moet verboden zijn.
Aanroepen tussen toepassingen
In dit voorbeeld ziet u hoe u Java-code schrijft om aan te roepen tussen toepassingen die zijn geregistreerd bij de Eureka Server voor Spring-onderdeel. Wanneer container-apps zijn gebonden aan Eureka, communiceren ze met elkaar via de Eureka-server.
In het voorbeeld worden twee toepassingen gemaakt, een beller en een aanroeper. Beide toepassingen communiceren tussen elkaar met behulp van de Eureka Server voor Spring-component. De toepassing Voor aanroepen wordt een eindpunt weergegeven dat wordt aangeroepen door de aanroepertoepassing.
Maak de aangeroepen toepassing. Schakel de Eureka-client in uw Spring Boot-toepassing in door de
@EnableDiscoveryClient
aantekening toe te voegen aan uw hoofdklasse.@SpringBootApplication @EnableDiscoveryClient public class CalleeApplication { public static void main(String[] args) { SpringApplication.run(CalleeApplication.class, args); } }
Maak een eindpunt in de aanroeptoepassing die wordt aangeroepen door de aanroepertoepassing.
@RestController public class CalleeController { @GetMapping("/call") public String calledByCaller() { return "Hello from Application callee!"; } }
Stel de naam van de toepassing in het configuratiebestand van de toepassing in, bijvoorbeeld in application.yml.
spring.application.name=callee
Maak de aanroepertoepassing.
Voeg de
@EnableDiscoveryClient
aantekening toe om de Eureka-clientfunctionaliteit in te schakelen. Maak ook eenWebClient.Builder
bean met de@LoadBalanced
aantekening om aanroepen met gelijke taakverdeling naar andere services uit te voeren.@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(); } }
Maak een controller in de aanroepertoepassing die de
WebClient.Builder
aanroeptoepassing gebruikt om de toepassing aan te roepen met behulp van de naam van de toepassing.@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); } }
U hebt nu een aanroeper en een aanroeper die met elkaar communiceert met behulp van Eureka Server voor Spring Java-onderdelen. Zorg ervoor dat beide toepassingen worden uitgevoerd en verbinden met de Eureka-server voordat u het /call-callee
eindpunt in de aanroepertoepassing test.
Beperkingen
Het Java-onderdeel van Eureka Server wordt geleverd met een standaardconfiguratie, eureka.server.enable-self-preservation
ingesteld op false
. Deze standaardconfiguratie helpt tijden te voorkomen wanneer exemplaren niet worden verwijderd nadat zelfbehoud is ingeschakeld. Als exemplaren te vroeg worden verwijderd, kunnen sommige aanvragen worden omgeleid naar niet-bestaande exemplaren. Als u deze instelling true
wilt wijzigen, kunt u deze overschrijven door uw eigen configuraties in te stellen in het Java-onderdeel.
Volgende stappen
Gerelateerde inhoud
De beheerde beheerder voor Spring integreren met Eureka Server voor Spring