Csatlakozás egy felügyelt Eureka-kiszolgálóhoz Spring alkalmazáshoz az Azure Container Apps-ban.

Az Eureka Server for Spring egy szolgáltatásregisztrációs adatbázis, amellyel a mikroszolgáltatások regisztrálhatják magukat, és felfedezhetnek más szolgáltatásokat. Az Eureka Server for Spring Azure Container Apps összetevőként érhető el. A tárolóalkalmazást az Eureka Server for Springhez kötheti az Eureka-kiszolgálóval való automatikus regisztrációhoz.

Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:

  • Hozzon létre egy Eureka Server for Spring Java összetevőt.
  • Kösse a tárolóalkalmazást az Eureka Server for Spring Java összetevőhöz.

Fontos

Ez az oktatóanyag olyan szolgáltatásokat használ, amelyek hatással lehetnek a Azure számlára. Ha úgy dönt, hogy követi a műveletet, győződjön meg arról, hogy törli a cikkben szereplő erőforrásokat a váratlan számlázás elkerülése érdekében.

Előfeltételek

  • Aktív előfizetéssel rendelkező Azure fiók. Ha még nincs ilyenje, ingyenesen létrehozhat egyet.
  • Azure CLI.

Megfontolások

Az Eureka Server for Spring tárolóalkalmazásokban való futtatásakor vegye figyelembe a következő részleteket:

Elem Magyarázat
Hatókör Az Eureka Server for Spring összetevő ugyanabban a környezetben fut, mint a csatlakoztatott tárolóalkalmazás.
Méretezés Az Eureka Server for Spring összetevő nem méretezhető. A minReplicas és maxReplicas skálázási tulajdonságok mindkettő 1-re van állítva. A magas rendelkezésre állás eléréséhez lásd : Magas rendelkezésre állású Eureka-szolgáltatás létrehozása a Container Appsben.
Források Az Eureka Server for Spring tárolóerőforrás-foglalása ki lett javítva. A processzormagok 0.5száma és a memória mérete .1 Gi
Díjszabás Az Eureka Server for Spring számlázása a fogyasztásalapú díjszabás alá tartozik. A felügyelt Java összetevők által felhasznált erőforrások számlázása az aktív/tétlen díjszabás szerint van kiszámlázva. Törölheti azokat az összetevőket, amelyek már nincsenek használatban a számlázás leállításához.
Kötés A tárolóalkalmazások kötéssel csatlakoznak egy Eureka Server for Spring-összetevőhöz. A kötések konfigurációkat injektálnak a tárolóalkalmazás környezeti változóiba. A kötés létrehozása után a tárolóalkalmazás beolvassa a környezeti változók konfigurációs értékeit, és csatlakozhat az Eureka Server for Spring összetevőhöz.

Beállítás

Mielőtt elkezdené használni az Eureka Server for Spring összetevőt, először létre kell hoznia a szükséges erőforrásokat.

Futtassa az alábbi parancsokat az erőforráscsoport tárolóalkalmazás-környezetben való létrehozásához.

  1. Hozzon létre változókat az alkalmazáskonfiguráció támogatásához. Ezeket az értékeket a lecke céljaira biztosítjuk.

    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"
    
    Változó Leírás
    LOCATION A Azure régió helye, ahol a tárolóalkalmazást és Java összetevőt hozza létre.
    ENVIRONMENT A bemutató alkalmazás tárolóalkalmazás-környezetének neve.
    RESOURCE_GROUP A bemutató alkalmazás Azure erőforráscsoportjának neve.
    EUREKA_COMPONENT_NAME A tárolóalkalmazáshoz létrehozott Java összetevő neve. Ebben az esetben létre kell hoznia egy Eureka Server for Spring Java összetevőt.
    IMAGE A konténeralkalmazásban használt konténerkép.
  2. Jelentkezzen be az Azure-ba az Azure CLI használatával.

    az login
    
  3. Hozzon létre egy erőforráscsoportot.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. Hozza létre a tárolóalkalmazás-környezetet.

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

Az Eureka Server for Spring Java összetevő létrehozása

Most, hogy már rendelkezik egy meglévő környezettel, létrehozhatja a tárolóalkalmazást, és összekapcsolhatja azt az Eureka Server for Spring Java összetevőpéldányával.

  1. Hozza létre az Eureka Server for Spring Java összetevőt.

    az containerapp env java-component eureka-server-for-spring create \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $EUREKA_COMPONENT_NAME
    
  2. Nem kötelező: Frissítse az Eureka Server for Spring Java összetevő konfigurációját.

    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
    

A tárolóalkalmazás kötése az Eureka Server for Spring Java összetevőhöz

  1. Hozza létre a tárolóalkalmazást, és kösse hozzá az Eureka Server for Spring összetevőhöz.

    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. Másolja az alkalmazás URL-címét egy szövegszerkesztőbe, hogy egy közelgő lépésben használhassa.

Térjen vissza a tárolóalkalmazáshoz a portálon. Másolja az alkalmazás URL-címét egy szövegszerkesztőbe, hogy egy közelgő lépésben használhassa.

Lépjen az útvonalra az /allRegistrationStatus Eureka Server for Spring összetevőben regisztrált összes alkalmazás megtekintéséhez.

A kötés számos konfigurációt injektál az alkalmazásba környezeti változókként, elsősorban a eureka.client.service-url.defaultZone tulajdonságként. Ez a tulajdonság az Eureka Server Java összetevő belső végpontját jelzi.

A kötés a következő tulajdonságokat is injektálja:

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

A eureka.client.register-with-eureka tulajdonság úgy van beállítva, hogy true kényszerítse a regisztrációt az Eureka-kiszolgálón. Ez a regisztráció felülírja a helyi beállítást application.properties, a konfigurációs kiszolgálóról stb. Ha false értékre szeretné állítani, felülírhatja egy környezeti változó megadásával a tárolóalkalmazásban.

A eureka.instance.prefer-ip-address tulajdonság a tárolóalkalmazás-környezet adott tartománynévrendszer-feloldási szabálya miatt van beállítva true . Ne módosítsa ezt az értéket, hogy ne szegje meg a kötést.

Nem kötelező: A konténeralkalmazás leválasztása az Eureka Server for Spring Java összetevőről

Ha el szeretne távolítani egy kötést egy tárolóalkalmazásból, használja a --unbind lehetőséget.

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

Az alkalmazás megtekintése irányítópulton keresztül

Fontos

Az irányítópult megtekintéséhez legalább a Microsoft.App/managedEnvironments/write szerepkört kell hozzárendelnie a fiókjához a felügyelt környezeti erőforráson. Kifejezetten hozzárendelhet a Owner vagy Contributor szerepkört az erőforráshoz. A lépéseket követve létrehozhat egy egyéni szerepkördefiníciót, és hozzárendelheti azt a fiókjához.

Feljegyzés

Az irányítópult nem érhető el a 21Vianet által üzemeltetett Azure.

  1. Egyéni szerepkördefiníció létrehozása.

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

    Mindenképpen cserélje le az <SUBSCRIPTION_ID> érték helyőrzőjének helyét az AssignableScopes előfizetés-azonosítóra.

  2. Rendelje hozzá az egyéni szerepkört a fiókjához egy felügyelt környezeti erőforráson.

    A felügyelt környezet erőforrás-azonosítójának lekérése:

    export ENVIRONMENT_ID=$(az containerapp env show \
        --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    
  3. Rendelje hozzá a szerepkört a fiókjához.

    A parancs futtatása előtt cserélje le a helyőrzőket, amelyeket a <> zárójelek jeleznek, a felhasználói vagy szolgáltatás-hozzáférési azonosítóra és a szerepkör nevére.

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

    Feljegyzés

    A <USER_OR_SERVICE_PRINCIPAL_ID> értéknek általában az a identitásnak kell lennie, amelyet a Azure portál eléréséhez használ. Az <ROLE_NAME> érték az 1. lépésben hozzárendelt név.

  4. Kérje le az Eureka Server for Spring-irányítópult URL-címét.

    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
    

    Ez a parancs az Eureka Server for Spring irányítópult eléréséhez használható URL-címet adja vissza. Az irányítópulton a tárolóalkalmazás is látható, ahogy az alábbi képernyőképen is látható.

    Képernyőkép az Eureka Server for Spring irányítópultjáról.

Nem kötelező: Integrálja az Eureka Server for Spring és a Admin for Spring Java összetevőit

Ha integrálni szeretné az Eureka Server for Spring-kiszolgálót és a Spring-Java-összetevők rendszergazdáit, tekintse meg a A Spring felügyelt rendszergazdájának integrálása a Spring-hez készült Eureka Serverrel.

Az erőforrások megtisztítása

Az oktatóanyagban létrehozott erőforrások hatással vannak a Azure számlára. Ha nem fogja hosszú távon használni ezeket a szolgáltatásokat, futtassa az alábbi parancsot az oktatóanyagban létrehozott összes eltávolításához.

az group delete --resource-group $RESOURCE_GROUP

Az Eureka Server for Spring engedélyezett konfigurációs listája

A következő szakaszok a támogatott konfigurációkat ismertetik. További információ: Spring Cloud Eureka Server.

Feljegyzés

Támogatási jegyeket küldhet be új funkciókérésekhez.

Konfigurációs lehetőségek

A az containerapp update parancs a --configuration paraméterrel szabályozza az Eureka Server for Spring konfigurálását. Egyszerre több paramétert is használhat, ha szóköz választja el őket egymástól. További információ: Spring Cloud Eureka Server.

A konfigurációs tulajdonságban a eureka.server következő konfigurációs beállítások érhetők el:

Név Leírás Alapértelmezett érték
eureka.server.enable-self-preservation Ha engedélyezve van, a kiszolgáló nyomon követi a kiszolgálótól kapott megújítások számát. Ha a megújítások száma a megadott küszöbérték eureka.server.renewal-percent-thresholdalá csökken. Az alapértelmezett érték az eredeti Eureka-kiszolgálón true értékre van állítva, de az Eureka Server Java összetevőben az alapértelmezett érték false. Lásd az Eureka Server for Spring Java összetevő limitációit. false
eureka.server.renewal-percent-threshold Az ügyfelektől a megadott eureka.server.renewal-threshold-update-interval-msidőszakban várható megújítások minimális százalékos aránya. Ha a megújítások a küszöbérték alá esnek, a lejáratok le lesznek tiltva, ha eureka.server.enable-self-preservation engedélyezve van. 0.85
eureka.server.renewal-threshold-update-interval-ms Az az időköz, amellyel a küszöbértéket frissíteni kell a eureka.server.renewal-percent-threshold-ben megadottak szerint. 0
eureka.server.expected-client-renewal-interval-seconds Az az intervallum, amellyel az ügyfelek várhatóan elküldik a szívverésüket. Alapértelmezés szerint 30 másodperc. Ha az ügyfelek különböző gyakorisággal küldenek szívveréseket, például 15 másodpercenként, akkor ezt a paramétert ennek megfelelően kell hangolni, ellenkező esetben az önmegőrzés nem a várt módon működik. 30
eureka.server.response-cache-auto-expiration-in-seconds Lekéri azt az időtartamot, amely ideig a regiszter terhelését a gyorsítótárban kell tárolni, ha a változási események nem érvénytelenítik. 180
eureka.server.response-cache-update-interval-ms Megadja azt az időtartamot, amellyel az ügyfél payload gyorsítótárát frissíteni kell. 0
eureka.server.use-read-only-response-cache Jelenleg com.netflix.eureka.registry.ResponseCache kétszintű gyorsítótárazási stratégiát használ a válaszokhoz. Lejárati readWrite politikával rendelkező gyorsítótár és readonly lejárat nélküli gyorsítótár. true
eureka.server.disable-delta Ellenőrzi, hogy a delta információk kézbesíthetők-e az ügyfél részére. false
eureka.server.retention-time-in-m-s-in-delta-queue Adja meg azt az időtartamot, ameddig a delta információt gyorsítótárazni kell, hogy az ügyfelek ne hagyják ki annak lekérésekor. 0
eureka.server.delta-retention-timer-interval-in-ms Határozza meg az időintervallumot, amellyel a tisztítási feladatnak fel kell ébrednie, és ellenőrizni a lejárt deltaadatokat. 0
eureka.server.eviction-interval-timer-in-ms Lekérheti azt az időintervallumot, amellyel a lejáró feladatnak felébrednie és futnia kell. 60000
eureka.server.sync-when-timestamp-differs Ellenőrzi, hogy szinkronizálja-e a példányokat, ha eltér az időbélyeg. true
eureka.server.rate-limiter-enabled Azt jelzi, hogy a sebességkorlátozót engedélyezni vagy letiltani kell-e. false
eureka.server.rate-limiter-burst-size Terhelés-korlátozó, tokenes vödrös algoritmus tulajdonsága. 10
eureka.server.rate-limiter-registry-fetch-average-rate Terhelés-korlátozó, tokenes vödrös algoritmus tulajdonsága. A kikényszerített kérelmek végrehajtási sebességének átlagát adja meg. 500
eureka.server.rate-limiter-privileged-clients A standard eureka Java ügyfelek mellett minősített ügyfelek listája. N/A
eureka.server.rate-limiter-throttle-standard-clients Adja meg, hogy van-e sebességkorlátozás a standard ügyfelekre. Ha false van beállítva, akkor csak a nem szabványos kliensek vannak korlátozva. false
eureka.server.rate-limiter-full-fetch-average-rate Terhelés-korlátozó, tokenes vödrös algoritmus tulajdonsága. A kikényszerített kérelmek végrehajtási sebességének átlagát adja meg. 100

Gyakori konfigurációk

  • Naplózással kapcsolatos konfigurációk:
    • logging.level.*
    • logging.group.*
    • A névtérben lévő logging.* egyéb konfigurációknak tilosnak kell lenniük – például a naplófájlok írását a használatával logging.file tiltani kell.

Alkalmazások közötti hívás

Ez a példa bemutatja, hogyan írhat Java kódot az Eureka Server for Spring összetevőben regisztrált alkalmazások közötti híváshoz. Ha a tárolóalkalmazások az Eureka-hoz vannak kötve, az Eureka-kiszolgálón keresztül kommunikálnak egymással.

A példa két alkalmazást hoz létre, egy hívót és egy hívottat. Mindkét alkalmazás az Eureka Server for Spring összetevő használatával kommunikál egymással. A hívó alkalmazás egy olyan végpontot tesz elérhetővé, amelyet a hívó alkalmazás hív meg.

  1. Hozza létre a hívó alkalmazást. Engedélyezze az Eureka-ügyfelet a Spring Boot-alkalmazásban úgy, hogy hozzáadja az @EnableDiscoveryClient annotációt a főosztályhoz.

    @SpringBootApplication
    @EnableDiscoveryClient
    public class CalleeApplication {
      public static void main(String[] args) {
        SpringApplication.run(CalleeApplication.class, args);
      }
    }
    
  2. Hozzon létre egy végpontot a hívó alkalmazás által hívott híváskezelő alkalmazásban.

    @RestController
    public class CalleeController {
    
        @GetMapping("/call")
        public String calledByCaller() {
            return "Hello from Application callee!";
        }
    }
    
  3. Állítsa be a hívó alkalmazás nevét az alkalmazáskonfigurációs fájlban – például application.yml.

    spring.application.name=callee
    
  4. Hozza létre a hívó alkalmazást.

    Adja hozzá a @EnableDiscoveryClient széljegyzetet az Eureka ügyfélfunkcióinak engedélyezéséhez. Emellett hozzon létre egy WebClient.Builder bean-t a @LoadBalanced annotációval, hogy terheléselosztásos hívásokat hajthasson végre más szolgáltatásokhoz.

    @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. Hozzon létre egy vezérlőt a hívó alkalmazásban, amely a WebClient.Builder használja a callee alkalmazásának meghívására annak alkalmazásneve, callee, megadásával.

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

Most már rendelkezik egy hívó és hívó alkalmazással, amely az Eureka Server for Spring Java összetevőivel kommunikál egymással. Mielőtt tesztelni kezdené a végpontot a /call-callee hívó alkalmazásban, győződjön meg arról, hogy mindkét alkalmazás fut és kapcsolódik az Eureka-kiszolgálóhoz.

Korlátozások

  • Az Eureka Server Java összetevő alapértelmezett konfigurációval rendelkezik, eureka.server.enable-self-preservation, amely false értékre van állítva. Ez az alapértelmezett konfiguráció segít elkerülni azokat az időket, amikor a példányok nem törlődnek az önmegőrzés engedélyezése után. Ha a példányok túl korán törlődnek, előfordulhat, hogy egyes kérések nem létező példányokra irányulnak. Ha ezt a beállítást true értékre szeretné módosítani, felülírhatja azt a Java összetevő saját konfigurációinak beállításával.
  • Az Eureka irányítópult nem érhető el a 21Vianet által üzemeltetett Azure.

Következő lépések

A Spring felügyelt rendszergazdájának integrálása az Eureka Server for Spring szolgáltatással