Delen via


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.

  1. 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.
  2. Meld u aan bij Azure met de Azure CLI.

    az login
    
  3. Maak een resourcegroep.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. 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.

  1. 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
    
  2. 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

  1. 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
    
  2. 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 falsewilt 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.

  1. 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 de AssignableScopes waarde vervangt door uw abonnements-id.

  2. 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)
    
  3. 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.

  4. 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.

    Schermopname van het Eureka Server voor Spring-dashboard.

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 behulp logging.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.

  1. 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);
      }
    }
    
  2. 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!";
        }
    }
    
  3. Stel de naam van de toepassing in het configuratiebestand van de toepassing in, bijvoorbeeld in application.yml.

    spring.application.name=callee
    
  4. Maak de aanroepertoepassing.

    Voeg de @EnableDiscoveryClient aantekening toe om de Eureka-clientfunctionaliteit in te schakelen. Maak ook een WebClient.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();
      }
    }
    
  5. 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-preservationingesteld 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 truewilt wijzigen, kunt u deze overschrijven door uw eigen configuraties in te stellen in het Java-onderdeel.

Volgende stappen

De beheerde beheerder voor Spring integreren met Eureka Server voor Spring