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.
- Rozhraní příkazového řádku Azure.
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.
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. Přihlaste se k Azure pomocí Azure CLI.
az login
Vytvořte skupinu prostředků.
az group create --name $RESOURCE_GROUP --location $LOCATION
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.
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
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
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
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.properties
konfigurač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.
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.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)
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.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.
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.
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); } }
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!"; } }
V konfiguračním souboru aplikace nastavte název volané aplikace , například v application.yml.
spring.application.name=callee
Vytvořte aplikaci volajícího.
Přidáním poznámky
@EnableDiscoveryClient
povolíte funkci klienta Eureka. Vytvořte také fan s poznámkouWebClient.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(); } }
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-preservation
nastavenou nafalse
. 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 natrue
, můžete ho přepsat nastavením vlastních konfigurací v komponentě Java. - Řídicí panel Eureka není v Azure China 21Vianet dostupný.
Další kroky
Související obsah
Integrace spravovaného správce pro Spring se serverem Eureka for Spring