Sdílet prostřednictvím


Připojení ke spravovanému serveru Eureka for Spring v Azure Container Apps

Eureka Server for Spring je registr služeb, který umožňuje, aby se mikroslužby zaregistrovaly a zjistily další služby. Eureka Server for Spring je k dispozici jako komponenta Azure Container Apps. Aplikaci kontejneru můžete svázat se serverem Eureka Server for Spring pro automatickou registraci na serveru Eureka.

V tomto kurzu se naučíte:

  • Vytvořte komponentu Eureka Server for Spring Java.
  • Vytvořte vazbu aplikace kontejneru na komponentu Eureka Server for Spring Java.

Důležité

V tomto kurzu se používají služby, které můžou ovlivnit fakturu za Azure. Pokud se rozhodnete postupovat podle pokynů, nezapomeňte odstranit prostředky doporučené v tomto článku, abyste se vyhnuli neočekávané fakturaci.

Požadavky

Důležité informace

Při spuštění Serveru Eureka pro Spring v Container Apps mějte na paměti následující podrobnosti:

Položka Vysvětlení
Obor Komponenta Eureka Server for Spring běží ve stejném prostředí jako připojená aplikace kontejneru.
Škálování Komponenta Eureka Server for Spring nemůže škálovat. Vlastnosti minReplicas škálování a maxReplicas obě jsou nastaveny na 1. Pokud chcete dosáhnout vysoké dostupnosti, přečtěte si téma Vytvoření vysoce dostupné služby Eureka v Container Apps.
Zdroje informací Opravili jsme přidělení prostředků kontejneru pro Server Eureka pro Spring. Počet jader procesoru je 0,5 a velikost paměti je 1 Gi.
Ceny Fakturace Serveru Eureka for Spring spadá do cen založených na spotřebě. Prostředky spotřebované spravovanými komponentami Java se účtují podle sazby aktivní/nečinné. K zastavení fakturace můžete odstranit komponenty, které se už nepoužívají.
Vazba Kontejnerové aplikace se připojují k komponentě Eureka Server for Spring prostřednictvím vazby. Vazby vloží konfigurace do proměnných prostředí kontejneru aplikace. Po vytvoření vazby může aplikace kontejneru číst konfigurační hodnoty z proměnných prostředí a připojit se k komponentě Eureka Server for Spring.

Nastavení

Než začnete pracovat s komponentou Eureka Server for Spring, musíte nejprve vytvořit požadované prostředky.

Spuštěním následujících příkazů vytvořte skupinu prostředků v prostředí aplikace kontejneru.

  1. Vytvořte proměnné pro podporu konfigurace aplikace. Tyto hodnoty jsou k dispozici pro účely této lekce.

    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"
    
    Proměnná Popis
    LOCATION Umístění oblasti Azure, kam vytvoříte aplikaci kontejneru a komponentu Java.
    ENVIRONMENT Název prostředí aplikace kontejneru pro ukázkové aplikace.
    RESOURCE_GROUP Název skupiny prostředků Azure pro ukázkovou aplikaci
    EUREKA_COMPONENT_NAME Název komponenty Java vytvořené pro vaši aplikaci kontejneru. V tomto případě vytvoříte komponentu Eureka Server for Spring Java.
    IMAGE Image kontejneru použitá v aplikaci kontejneru.
  2. Přihlaste se k Azure pomocí Azure CLI.

    az login
    
  3. Vytvořte skupinu prostředků.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. Vytvořte prostředí kontejnerové aplikace.

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

Vytvoření komponenty Eureka Server for Spring Java

Teď, když máte existující prostředí, můžete vytvořit aplikaci kontejneru a svázat ji s instancí komponenty Java Serveru Eureka pro Spring.

  1. Vytvořte komponentu 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. Volitelné: Aktualizujte konfiguraci komponenty Spring Java serveru Eureka.

    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
    

Vytvoření vazby aplikace kontejneru k komponentě Eureka Server for Spring Java

  1. Vytvořte aplikaci kontejneru a vytvořte vazbu na komponentu 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. Zkopírujte adresu URL aplikace do textového editoru, abyste ji mohli použít v nadcházejícím kroku.

Vraťte se do aplikace kontejneru na portálu. Zkopírujte adresu URL aplikace do textového editoru, abyste ji mohli použít v nadcházejícím kroku.

Přejděte na trasu /allRegistrationStatus a zobrazte všechny aplikace zaregistrované v komponentě Eureka Server for Spring.

Vazba vloží do aplikace několik konfigurací jako proměnné prostředí, především vlastnost eureka.client.service-url.defaultZone . Tato vlastnost označuje interní koncový bod komponenty Java serveru Eureka.

Vazba také vloží následující vlastnosti:

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

Vlastnost je nastavena eureka.client.register-with-eureka na true vynucení registrace u serveru Eureka. Tato registrace přepíše místní nastavení z application.propertieskonfiguračního serveru atd. Pokud ho chcete nastavit na false, můžete ho přepsat nastavením proměnné prostředí v aplikaci kontejneru.

Tato eureka.instance.prefer-ip-address vlastnost je nastavená kvůli true konkrétnímu pravidlu překladu názvů domén v prostředí aplikace kontejneru. Tuto hodnotu neupravujte tak, abyste nepřerušili vazbu.

Volitelné: Zrušení vazby aplikace kontejneru z komponenty Eureka Server for Spring Java

Pokud chcete odebrat vazbu z aplikace kontejneru, použijte tuto --unbind možnost.

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

Zobrazení aplikace prostřednictvím řídicího panelu

Důležité

Pokud chcete zobrazit řídicí panel, musíte mít přiřazenou alespoň Microsoft.App/managedEnvironments/write roli k vašemu účtu ve spravovaném prostředku prostředí. K prostředku můžete explicitně přiřadit Owner roli Contributor . Můžete také podle kroků vytvořit vlastní definici role a přiřadit ji k vašemu účtu.

Poznámka:

Řídicí panel není k dispozici v Azure China 21Vianet.

  1. Vytvořte vlastní definici role.

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

    Nezapomeňte zástupný symbol v hodnotě AssignableScopes nahradit <SUBSCRIPTION_ID> ID vašeho předplatného.

  2. Přiřaďte vlastní roli k účtu u prostředku spravovaného prostředí.

    Získejte ID prostředku spravovaného prostředí:

    export ENVIRONMENT_ID=$(az containerapp env show \
        --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    
  3. Přiřaďte roli k účtu.

    Před spuštěním tohoto příkazu nahraďte zástupné symboly označené <> závorkami za ID uživatele nebo instančního objektu a název vaší role.

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

    Poznámka:

    Hodnota <USER_OR_SERVICE_PRINCIPAL_ID> by obvykle měla být identita, kterou používáte pro přístup k webu Azure Portal. Hodnota <ROLE_NAME> je název, který jste přiřadili v kroku 1.

  4. Získejte adresu URL řídicího panelu 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
    

    Tento příkaz vrátí adresu URL, kterou můžete použít pro přístup k řídicímu panelu Eureka Server for Spring. Na řídicím panelu můžete také zobrazit aplikaci kontejneru, jak je znázorněno na následujícím snímku obrazovky.

    Snímek obrazovky znázorňující řídicí panel Eureka Server for Spring

Volitelné: Integrace serveru Eureka pro komponenty Spring a Admin for Spring Java

Pokud chcete integrovat server Eureka pro Spring a správce pro komponenty Spring Java, přečtěte si téma Integrace spravovaného správce pro Spring s Eureka Serverem for Spring.

Vyčištění prostředků

Prostředky vytvořené v tomto kurzu mají vliv na fakturu za Azure. Pokud tyto služby nebudete používat dlouhodobě, spuštěním následujícího příkazu odeberte vše, co jste vytvořili v tomto kurzu.

az group delete --resource-group $RESOURCE_GROUP

Seznam povolených konfigurací pro server Eureka for Spring

Následující části popisují podporované konfigurace. Další informace najdete v tématu Spring Cloud Eureka Server.

Poznámka:

Odešlete lístky podpory pro nové žádosti o funkce.

Možnosti konfigurace

Příkaz az containerapp update pomocí parametru --configuration určuje, jak je nakonfigurovaný Server Eureka for Spring. Můžete použít více parametrů najednou, pokud jsou oddělené mezerou. Další informace najdete v tématu Spring Cloud Eureka Server.

Pro vlastnost konfigurace jsou k dispozici eureka.server následující nastavení konfigurace:

Název Popis Default value
eureka.server.enable-self-preservation Pokud je tato možnost povolená, server sleduje počet prodloužení, které by měl ze serveru obdržet. Kdykoli počet prodloužení klesne pod procento prahové hodnoty, jak je definováno eureka.server.renewal-percent-threshold. Výchozí hodnota je nastavena na true původní server Eureka, ale v komponentě Eureka Server Java je výchozí hodnota nastavena na false. Viz Omezení součásti Eureka Server for Spring Java. false
eureka.server.renewal-percent-threshold Minimální procento prodlužování, které se očekává od klientů v období určeném eureka.server.renewal-threshold-update-interval-ms. Pokud prodloužení klesne pod prahovou hodnotu, jsou vypršení platnosti zakázaná, pokud eureka.server.enable-self-preservation je povolená. 0.85
eureka.server.renewal-threshold-update-interval-ms Interval, pomocí kterého je potřeba aktualizovat prahovou hodnotu ( jak je uvedeno v eureka.server.renewal-percent-threshold ) 0
eureka.server.expected-client-renewal-interval-seconds Interval, kdy mají klienti odesílat prezenčních signálů. Výchozí hodnota je 30 sekund. Pokud klienti odesílají prezenční signály s různou frekvencí, například každých 15 sekund, měl by být tento parametr odpovídajícím způsobem vyladěn, jinak nebude samoobslužné zachování fungovat podle očekávání. 30
eureka.server.response-cache-auto-expiration-in-seconds Získá čas, pro který by se datová část registru měla uchovávat v mezipaměti, pokud není zneplatněna událostmi změn. 180
eureka.server.response-cache-update-interval-ms Získá časový interval, pomocí kterého se má aktualizovat mezipaměť datové části klienta. 0
eureka.server.use-read-only-response-cache V com.netflix.eureka.registry.ResponseCache současné době se pro odpovědi používá strategie ukládání do mezipaměti na dvou úrovních. readWrite Mezipaměť se zásadami vypršení platnosti a mezipamětíreadonly, která se ukládá do mezipaměti bez vypršení platnosti. true
eureka.server.disable-delta Zkontroluje, jestli se rozdílové informace dají obsluhovat klientovi nebo ne. false
eureka.server.retention-time-in-m-s-in-delta-queue Získejte čas, po který by se měly informace o rozdílu ukládat do mezipaměti pro klienty, aby načetly hodnotu, aniž by jí chyběly. 0
eureka.server.delta-retention-timer-interval-in-ms Získejte časový interval, ve kterém se má úloha vyčištění probudit a zkontrolovat, jestli vypršela platnost rozdílových informací. 0
eureka.server.eviction-interval-timer-in-ms Získejte časový interval, ve kterém má úloha, u které vyprší platnost instancí, probudit a spustit. 60000
eureka.server.sync-when-timestamp-differs Zkontroluje, jestli se mají synchronizovat instance, když se časové razítko liší. true
eureka.server.rate-limiter-enabled Určuje, jestli má být omezovač rychlosti povolený nebo zakázaný. false
eureka.server.rate-limiter-burst-size Omezovač rychlosti, vlastnost algoritmu kbelíku tokenů 10
eureka.server.rate-limiter-registry-fetch-average-rate Omezovač rychlosti, vlastnost algoritmu kbelíku tokenů Určuje průměrnou míru vynucených požadavků. 500
eureka.server.rate-limiter-privileged-clients Seznam certifikovaných klientů To je kromě standardních klientů Eureka Java. N/A
eureka.server.rate-limiter-throttle-standard-clients Uveďte, jestli jsou klienti limitu rychlosti standardní. Pokud je nastavená hodnota false, jsou omezeny pouze nestandardní klienti. false
eureka.server.rate-limiter-full-fetch-average-rate Omezovač rychlosti, vlastnost algoritmu kbelíku tokenů Určuje průměrnou míru vynucených požadavků. 100

Běžné konfigurace

  • Protokolování souvisejících konfigurací:
    • logging.level.*
    • logging.group.*
    • Všechny ostatní konfigurace v logging.* oboru názvů by měly být zakázané – například zápis souborů protokolu pomocí logging.file by měl být zakázán.

Volání mezi aplikacemi

Tento příklad ukazuje, jak napsat kód Java pro volání mezi aplikacemi registrovanými komponentou Eureka Server for Spring. Když jsou kontejnerové aplikace svázané s Eurekou, komunikují mezi sebou prostřednictvím serveru Eureka.

Příklad vytvoří dvě aplikace, volající a volaný. Obě aplikace vzájemně komunikují pomocí komponenty Eureka Server for Spring. Volaná aplikace zveřejňuje koncový bod, který volá aplikace volajícího.

  1. Vytvořte volanou aplikaci. Povolte klienta Eureka v aplikaci Spring Boot přidáním poznámky @EnableDiscoveryClient do hlavní třídy.

    @SpringBootApplication
    @EnableDiscoveryClient
    public class CalleeApplication {
      public static void main(String[] args) {
        SpringApplication.run(CalleeApplication.class, args);
      }
    }
    
  2. V volané aplikaci vytvořte koncový bod, který volá volající aplikace.

    @RestController
    public class CalleeController {
    
        @GetMapping("/call")
        public String calledByCaller() {
            return "Hello from Application callee!";
        }
    }
    
  3. V konfiguračním souboru aplikace nastavte název volané aplikace , například v application.yml.

    spring.application.name=callee
    
  4. Vytvořte aplikaci volajícího.

    Přidáním poznámky @EnableDiscoveryClient povolíte funkci klienta Eureka. Vytvořte také fan s poznámkou WebClient.Builder @LoadBalanced pro provádění volání s vyrovnáváním zatížení do jiných služeb.

    @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. V aplikaci volajícího vytvořte kontroler, který používá WebClient.Builder volání volané aplikace pomocí názvu aplikace volané.

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

Teď máte volající a volanou aplikaci, která mezi sebou komunikuje pomocí komponenty Eureka Server for Spring Java. Před testováním koncového /call-callee bodu v aplikaci volajícího se ujistěte, že jsou spuštěné obě aplikace, a vytvořte vazbu se serverem Eureka.

Omezení

  • Komponenta Java serveru Eureka se dodává s výchozí konfigurací , eureka.server.enable-self-preservationnastavenou na false. Tato výchozí konfigurace pomáhá vyhnout se časům, kdy se instance neodstraní po povolení samoobslužného zachování. Pokud jsou instance odstraněny příliš brzy, můžou být některé požadavky směrovány na neexistující instance. Pokud chcete toto nastavení změnit na true, můžete ho přepsat nastavením vlastních konfigurací v komponentě Java.
  • Řídicí panel Eureka není v Azure China 21Vianet dostupný.

Další kroky

Integrace spravovaného správce pro Spring se serverem Eureka for Spring