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

  • Účet Azure s aktivním předplatným. Pokud ho ještě nemáte, můžete si ho zdarma vytvořit.
  • Azure CLI

Úvahy

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í
Scope 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 škálování minReplicas a maxReplicas 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í Přidělení prostředků kontejneru pro Server Eureka pro Spring je pevně stanovené. 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 injektují konfigurace do prostředí proměnných kontejnerové 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í kontejnerové aplikace.

  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
    

Připojte vaši aplikaci kontejneru k Eureka Serveru ve Spring Java komponentě.

  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 kontejnerové aplikace 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 eureka.client.register-with-eureka je nastavena na true k vynucení registrace u serveru Eureka. Tato registrace přepíše místní nastavení v application.properties, z konfiguračního serveru a tak dále. 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á na true kvůli specifickému pravidlu systému překladu názvů domén v prostředí kontejnerové aplikace. Tuto hodnotu neupravujte tak, abyste nepřerušili vazbu.

Volitelné: Odvázání vaší aplikace kontejneru od serveru Eureka pro komponentu 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ředí. Můžete přiřadit explicitně roli Owner nebo Contributor k prostředku. 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>"]
    }'
    

    Ujistěte se, že zástupný symbol <SUBSCRIPTION_ID> v hodnotě AssignableScopes nahradíte ID svého 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 vaše ID uživatele nebo ID služební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 podporu prostřednictvím ticketů pro požadavky na nové 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.

Následující nastavení konfigurace jsou k dispozici na eureka.server vlastnosti konfigurace:

Name Popis Výchozí hodnota
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í serveru Eureka pro 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í klesnou pod prahovou hodnotu, jsou vypršení zakázána, pokud je eureka.server.enable-self-preservation povoleno. 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 Časový interval, ve kterém se očekává, že klienti budou odesílat své heartbeaty. Výchozí nastavení je 30 sekund. Pokud klienti odesílají prezenční signály v různé frekvenci, například každých 15 sekund, měl by být tento parametr odpovídajícím způsobem nastaven, jinak sebezáchova nebude 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á interval, kterým se má aktualizovat mezipaměť zátěže klienta. 0
eureka.server.use-read-only-response-cache com.netflix.eureka.registry.ResponseCache současné době používá strategii ukládání do mezipaměti na dvou úrovních pro odpovědi. readWrite Mezipaměť se zásadami vypršení platnosti a readonly mezipaměť, která ukládá bez vypršení platnosti. true
eureka.server.disable-delta Zkontroluje, zda rozdílové informace mohou být klientovi poskytnuty. false
eureka.server.retention-time-in-m-s-in-delta-queue Získejte dobu, po kterou by se měly informace o rozdílu uchovávat v mezipaměti, aby je klienti mohli načíst bez chybějících hodnot. 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, se kterým by se měly úlohy, kterým vyprší platnost instancí, probouzet a spouštět. 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 frekvenci vynucovaných požadavků. 500
eureka.server.rate-limiter-privileged-clients Seznam certifikovaných klientů To je kromě standardních klientů Java Eureka. N/A
eureka.server.rate-limiter-throttle-standard-clients Uveďte, zda mají standardní klienti nějaký omezovač rychlosti. 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ího a přijímacího (callee). Obě aplikace vzájemně komunikují pomocí komponenty Eureka Server for Spring. Volaná aplikace zveřejňuje koncový bod, který je volán volající aplikací.

  1. Vytvořte cílovou 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é WebClient.Builder bean s anotací @LoadBalanced pro provádění volání s vyváženým zatížením 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ý pomocí WebClient.Builder zavolá volanou aplikaci podle jejího názvu, tedy "callee".

    @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