Dela via


Självstudie: Ansluta till en hanterad Eureka Server for Spring i Azure Container Apps

Eureka Server for Spring är ett tjänstregister som gör att mikrotjänster kan registrera sig själva och identifiera andra tjänster. Eureka Server for Spring är tillgänglig som en Azure Container Apps-komponent. Du kan binda din containerapp till Eureka Server for Spring för automatisk registrering med Eureka-servern.

I den här självstudien lär du dig att:

  • Skapa en Eureka Server för Spring Java-komponent.
  • Binda containerappen till Komponenten Eureka Server for Spring Java.

Viktigt!

I den här självstudien används tjänster som kan påverka din Azure-faktura. Om du bestämmer dig för att följa med ska du ta bort resurserna i den här artikeln för att undvika oväntad fakturering.

Förutsättningar

Att tänka på

När du kör Eureka Server for Spring i Container Apps bör du vara medveten om följande information:

Artikel Förklaring
Omfattning Komponenten Eureka Server for Spring körs i samma miljö som den anslutna containerappen.
Skalning Eureka Server for Spring conponent kan inte skalas. Skalningsegenskaperna minReplicas och maxReplicas är båda inställda på 1. Information om hur du uppnår hög tillgänglighet finns i Skapa en Eureka-tjänst med hög tillgänglighet i Container Apps.
Resurser Tilldelningen av containerresurser för Eureka Server for Spring är fast. Antalet CPU-kärnor är 0,5 och minnesstorleken är 1 Gi.
Prissättning Eureka Server for Spring-faktureringen faller under förbrukningsbaserad prissättning. Resurser som används av hanterade Java-komponenter debiteras enligt aktiva/inaktiva priser. Du kan ta bort komponenter som inte längre används för att stoppa faktureringen.
Bindning Containerappar ansluter till en Eureka Server for Spring-komponent via en bindning. Bindningarna matar in konfigurationer i miljövariabler för containerappar. När en bindning har upprättats kan containerappen läsa konfigurationsvärdena från miljövariabler och ansluta till Eureka Server for Spring-komponenten.

Ställ in

Innan du börjar arbeta med Eureka Server for Spring-komponenten måste du först skapa de resurser som krävs.

Kör följande kommandon för att skapa resursgruppen i en containerappmiljö.

  1. Skapa variabler som stöd för programkonfigurationen. Dessa värden tillhandahålls för dig i den här lektionen.

    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"
    
    Olika beskrivning
    LOCATION Den Plats i Azure-regionen där du skapar din containerapp och Java-komponent.
    ENVIRONMENT Miljönamnet för containerappen för ditt demoprogram.
    RESOURCE_GROUP Namnet på Azure-resursgruppen för demoprogrammet.
    EUREKA_COMPONENT_NAME Namnet på Java-komponenten som skapats för containerappen. I det här fallet skapar du en Eureka Server för Spring Java-komponent.
    IMAGE Containeravbildningen som används i containerappen.
  2. Logga in på Azure med Azure CLI.

    az login
    
  3. Skapa en resursgrupp.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. Skapa din containerappmiljö.

    az containerapp env create \
      --name $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION
    

Skapa Komponenten Eureka Server for Spring Java

Nu när du har en befintlig miljö kan du skapa din containerapp och binda den till en Java-komponentinstans av Eureka Server for Spring.

  1. Skapa Komponenten Eureka Server for Spring Java.

    az containerapp env java-component eureka-server-for-spring create \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $EUREKA_COMPONENT_NAME
    
  2. Valfritt: Uppdatera komponentkonfigurationen för Eureka Server för 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
    

Binda din containerapp till Komponenten Eureka Server for Spring Java

  1. Skapa containerappen och binda den till Komponenten Eureka Server for Spring.

    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. Kopiera url:en för din app till en textredigerare så att du kan använda den i ett kommande steg.

Gå tillbaka till containerappen i portalen. Kopiera url:en för din app till en textredigerare så att du kan använda den i ett kommande steg.

Gå till vägen /allRegistrationStatus för att visa alla program som är registrerade med Eureka Server for Spring-komponenten.

Bindningen matar in flera konfigurationer i programmet som miljövariabler, främst egenskapen eureka.client.service-url.defaultZone . Den här egenskapen anger den interna slutpunkten för Komponenten Eureka Server Java.

Bindningen matar också in följande egenskaper:

"eureka.client.register-with-eureka":    "true"
"eureka.client.fetch-registry":          "true"
"eureka.instance.prefer-ip-address":     "true"

Egenskapen eureka.client.register-with-eureka är inställd på att true framtvinga registrering med Eureka-servern. Den här registreringen skriver över den lokala inställningen i application.properties, från konfigurationsservern och så vidare. Om du vill ange den till falsekan du skriva över den genom att ange en miljövariabel i containerappen.

Egenskapen eureka.instance.prefer-ip-address är inställd true på på grund av den specifika domänens systemmatchningsregel i containerappmiljön. Ändra inte det här värdet så att du inte bryter bindningen.

Valfritt: Avbind din containerapp från Komponenten Eureka Server for Spring Java

Om du vill ta bort en bindning från en containerapp använder du alternativet --unbind .

az containerapp update \
    --name $APP_NAME \
    --unbind $JAVA_COMPONENT_NAME \
    --resource-group $RESOURCE_GROUP

Visa programmet via en instrumentpanel

Viktigt!

Om du vill visa instrumentpanelen måste du ha minst rollen Microsoft.App/managedEnvironments/write tilldelad till ditt konto på resursen för den hanterade miljön. Du kan uttryckligen tilldela resursen Owner eller Contributor rollen. Du kan också följa stegen för att skapa en anpassad rolldefinition och tilldela den till ditt konto.

  1. Skapa en anpassad rolldefinition.

    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>"]
    }'
    

    Ersätt <SUBSCRIPTION_ID> platshållaren i AssignableScopes värdet med ditt prenumerations-ID.

  2. Tilldela den anpassade rollen till ditt konto på en hanterad miljöresurs.

    Hämta resurs-ID för den hanterade miljön:

    export ENVIRONMENT_ID=$(az containerapp env show \
        --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    
  3. Tilldela rollen till ditt konto.

    Innan du kör det här kommandot ersätter du platshållarna – som anges med <> hakparenteserna – med ditt användar- eller tjänsthuvudnamns-ID och ditt rollnamn.

    az role assignment create \
        --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \
        --role "<ROLE_NAME>" \
        --scope $ENVIRONMENT_ID
    

    Kommentar

    Värdet <USER_OR_SERVICE_PRINCIPAL_ID> bör vanligtvis vara den identitet som du använder för att komma åt Azure Portal. Värdet <ROLE_NAME> är det namn som du tilldelade i steg 1.

  4. Hämta URL:en för Instrumentpanelen för Eureka Server for Spring.

    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
    

    Det här kommandot returnerar den URL som du kan använda för att komma åt instrumentpanelen Eureka Server for Spring. Med instrumentpanelen kan du också se din containerapp, som du ser i följande skärmbild.

    Skärmbild som visar instrumentpanelen Eureka Server för Spring.

Valfritt: Integrera Komponenterna Eureka Server for Spring och Admin för Spring Java

Om du vill integrera Komponenterna Eureka Server for Spring och Admin for Spring Java kan du läsa Integrera den hanterade administratören för Spring med Eureka Server for Spring.

Rensa resurser

De resurser som skapas i den här självstudien påverkar din Azure-faktura. Om du inte ska använda dessa tjänster på lång sikt kör du följande kommando för att ta bort allt du skapade i den här självstudien.

az group delete --resource-group $RESOURCE_GROUP

Lista över tillåtna konfigurationer för Din Eureka-server för Spring

I följande avsnitt beskrivs de konfigurationer som stöds. Mer information finns i Spring Cloud Eureka Server.

Kommentar

Skicka supportärenden för nya funktionsförfrågningar.

Konfigurationsalternativ

Kommandot az containerapp update använder parametern --configuration för att styra hur Eureka-servern för Spring konfigureras. Du kan använda flera parametrar samtidigt så länge de avgränsas med ett blanksteg. Mer information finns i Spring Cloud Eureka Server.

Följande konfigurationsinställningar är tillgängliga för konfigurationsegenskapen eureka.server :

Name Beskrivning Standardvärde
eureka.server.enable-self-preservation När den är aktiverad håller servern reda på hur många förnyelser den ska ta emot från servern. Varje gång antalet förnyelser sjunker under tröskelvärdet enligt definitionen av eureka.server.renewal-percent-threshold. Standardvärdet anges till true i den ursprungliga Eureka-servern, men i Komponenten Eureka Server Java är standardvärdet inställt på false. Se Begränsningar för Komponenten Eureka Server for Spring Java. false
eureka.server.renewal-percent-threshold Den minsta procentandel av förnyelser som förväntas från klienterna under den period som anges av eureka.server.renewal-threshold-update-interval-ms. Om förnyelserna sjunker under tröskelvärdet inaktiveras förfallodatumen om eureka.server.enable-self-preservation det är aktiverat. 0.85
eureka.server.renewal-threshold-update-interval-ms Det intervall med vilket tröskelvärdet , som anges i eureka.server.renewal-percent-threshold , måste uppdateras. 0
eureka.server.expected-client-renewal-interval-seconds Det intervall med vilket klienter förväntas skicka sina pulsslag. Standardvärdet är 30 sekunder. Om klienter skickar pulsslag med olika frekvens, till exempel var 15:e sekund, bör den här parametern justeras i enlighet med detta, annars fungerar inte självbevarande som förväntat. 30
eureka.server.response-cache-auto-expiration-in-seconds Hämtar den tid för vilken registernyttolasten ska sparas i cacheminnet om den inte har ogiltigförklarats av ändringshändelser. 180
eureka.server.response-cache-update-interval-ms Hämtar tidsintervallet som nyttolastcachen för klienten ska uppdateras med. 0
eureka.server.use-read-only-response-cache För com.netflix.eureka.registry.ResponseCache närvarande använder en cachelagringsstrategi på två nivåer för svar. En readWrite cache med en förfalloprincip och en readonly cache som cachelagrar utan förfallodatum. true
eureka.server.disable-delta Kontrollerar om deltainformationen kan hanteras till klienten eller inte. false
eureka.server.retention-time-in-m-s-in-delta-queue Hämta den tid för vilken deltainformationen ska cachelagras så att klienterna kan hämta värdet utan att det saknas. 0
eureka.server.delta-retention-timer-interval-in-ms Hämta tidsintervallet med vilket rensningsaktiviteten ska aktiveras och kontrollera om deltainformationen har upphört att gälla. 0
eureka.server.eviction-interval-timer-in-ms Hämta tidsintervallet som aktiviteten som upphör att gälla ska aktiveras och köras. 60000
eureka.server.sync-when-timestamp-differs Kontrollerar om tidsstämpeln ska synkroniseras när tidsstämpeln skiljer sig åt. true
eureka.server.rate-limiter-enabled Anger om hastighetsbegränsningen ska aktiveras eller inaktiveras. false
eureka.server.rate-limiter-burst-size Rate limiter, token bucket algorithm property. 10
eureka.server.rate-limiter-registry-fetch-average-rate Rate limiter, token bucket algorithm property. Anger den genomsnittliga tvingande begärandefrekvensen. 500
eureka.server.rate-limiter-privileged-clients En lista över certifierade klienter. Detta är utöver standard-eureka Java-klienter. N/A
eureka.server.rate-limiter-throttle-standard-clients Ange om standardklienter för hastighetsbegränsning. Om värdet falseär är endast icke-standardklienter hastighetsbegränsade. false
eureka.server.rate-limiter-full-fetch-average-rate Rate limiter, token bucket algorithm property. Anger den genomsnittliga tvingande begärandefrekvensen. 100

Vanliga konfigurationer

  • Loggningsrelaterade konfigurationer:
    • logging.level.*
    • logging.group.*
    • Andra konfigurationer under logging.* namnområdet bör förbjudas, till exempel bör det vara förbjudet att skriva loggfiler med hjälp logging.file av.

Samtal mellan program

Det här exemplet visar hur du skriver Java-kod för att anropa mellan program som registrerats med Eureka Server for Spring-komponenten. När containerappar är bundna till Eureka kommunicerar de med varandra via Eureka-servern.

Exemplet skapar två program, en anropare och en anropare. Båda programmen kommunicerar med varandra med hjälp av Eureka Server for Spring-komponenten. Anroparprogrammet exponerar en slutpunkt som anropas av anroparprogrammet.

  1. Skapa programmet för anropare. Aktivera Eureka-klienten i ditt Spring Boot-program genom att lägga till anteckningen i huvudklassen @EnableDiscoveryClient .

    @SpringBootApplication
    @EnableDiscoveryClient
    public class CalleeApplication {
      public static void main(String[] args) {
        SpringApplication.run(CalleeApplication.class, args);
      }
    }
    
  2. Skapa en slutpunkt i anroparprogrammet som anropas av anroparprogrammet.

    @RestController
    public class CalleeController {
    
        @GetMapping("/call")
        public String calledByCaller() {
            return "Hello from Application callee!";
        }
    }
    
  3. Ange namnet på det anropade programmet i programkonfigurationsfilen , till exempel i application.yml.

    spring.application.name=callee
    
  4. Skapa anroparprogrammet.

    Lägg till kommentaren @EnableDiscoveryClient för att aktivera Eureka-klientfunktioner. Skapa också en WebClient.Builder böna med kommentaren @LoadBalanced för att utföra belastningsutjämningsanrop till andra tjänster.

    @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. Skapa en kontrollant i anroparprogrammet som använder WebClient.Builder för att anropa anroparprogrammet med hjälp av dess programnamn, anropare.

    @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);
        }
    }
    

Nu har du ett samtals- och samtalsprogram som kommunicerar med varandra med hjälp av Eureka Server för Spring Java-komponenter. Kontrollera att båda programmen körs och binder till Eureka-servern innan du testar /call-callee slutpunkten i anroparprogrammet.

Begränsningar

Komponenten Eureka Server Java levereras med en standardkonfiguration, eureka.server.enable-self-preservation, inställd på false. Den här standardkonfigurationen hjälper till att undvika tider då instanser inte tas bort när självbevarande har aktiverats. Om instanser tas bort för tidigt kan vissa begäranden dirigeras till obefintliga instanser. Om du vill ändra den här inställningen till truekan du skriva över den genom att ange dina egna konfigurationer i Java-komponenten.

Nästa steg

Integrera den hanterade administratören för Spring med Eureka Server for Spring