Share via


Alkalmazáskonfiguráció támogatása

Ez a cikk a Spring Cloud Azure-alkalmazás konfigurációs kódtárát ismerteti. Ez a kódtár betölti a konfigurációkat és a funkciójelzőket a Azure-alkalmazás Konfigurációs szolgáltatásból. A kódtár absztrakciókat PropertySource hoz létre, hogy megfeleljenek a Spring-környezet által már létrehozott absztrakcióknak, például környezeti változóknak, parancssori konfigurációknak, helyi konfigurációs fájloknak stb.

A Spring a VMware által kifejlesztett nyílt forráskódú alkalmazás-keretrendszer, amely egyszerűsített, moduláris megközelítést biztosít a Java-alkalmazások létrehozásához. A Spring Cloud Azure egy nyílt forráskódú projekt, amely zökkenőmentes Spring-integrációt biztosít az Azure-szolgáltatásokkal.

Előfeltételek

Az Alkalmazáskonfigurációs áruház beállítása

Az alábbi paranccsal hozza létre a Azure-alkalmazás Konfigurációs tárat:

az appconfig create \
    --resource-group <your-resource-group> \
    --name <name-of-your-new-store> \
    --sku Standard

Ez a parancs létrehoz egy új, üres konfigurációs tárolót. A konfigurációkat az alábbi importálási paranccsal töltheti fel:

az appconfig kv import \
    --name <name-of-your-new-store> \
    --source file \
    --path <location-of-your-properties-file> \
    --format properties \
    --prefix /application/

Mielőtt betöltené őket, ellenőrizze a konfigurációkat. YAML-fájlokat úgy tölthet fel, hogy a formátumot YAML formátumra módosítja. Az előtagmező azért fontos, mert ez az ügyfélkódtár által betöltött alapértelmezett előtag.

Tárhasználat

Ha egy alkalmazásban szeretné használni a funkciót, Spring Boot-alkalmazásként is létrehozhatja. A függőség hozzáadásának legkényelmesebb módja a Spring Boot starter com.azure.spring:spring-cloud-azure-starter-appconfiguration-config. Az alábbi példa pom.xml fájl Azure-alkalmazás konfigurációt használ:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>{spring-boot-version}</version>
    <relativePath />
</parent>

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-dependencies</artifactId>
      <version>5.12.0</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-appconfiguration-config</artifactId>
    </dependency>
</dependencies>
<build>
    <plugins>
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
           </plugin>
    </plugins>
</build>

Feljegyzés

Ha Spring Boot 2.x-et használ, mindenképpen állítsa be a verziót 4.18.0.spring-cloud-azure-dependencies A BOM-hez használt verzióról további információt a Spring Cloud Azure melyik verzióját érdemes használni.

Az alábbi példa egy alapszintű Spring Boot-alkalmazást mutat be az alkalmazáskonfiguráció használatával:

@SpringBootApplication
@RestController
public class Application {

    @RequestMapping("/")
    public String home() {
        return "Hello World!";
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

Ebben a példában a bootstrap.properties fájl a következő sort tartalmazza:

spring.cloud.azure.appconfiguration.stores[0].connection-string=${CONFIG_STORE_CONNECTION_STRING}

CONFIG_STORE_CONNECTION_STRINGegy környezeti változó, amely a Azure-alkalmazás Configuration Store-ba kapcsolati sztring. A kapcsolati sztring a következő paranccsal érheti el:

az appconfig credential list --name <name-of-your-store>

Alapértelmezés szerint, ha nincsenek beállítva konfigurációk, a kezdő konfigurációk egy alapértelmezett címkével /application/(No Label) vannak betöltve, kivéve, ha egy Spring Profile van beállítva, ebben az esetben az alapértelmezett címke a Spring Profile. Mivel az áruház üres, a rendszer nem tölt be konfigurációkat, de a Azure-alkalmazás Konfiguráció tulajdonságforrása továbbra is létre lesz hozva.

Létrejön egy névvel ellátott /application/https://<name-of-your-store>.azconfig.io/ tulajdonságforrás, amely az adott tároló tulajdonságait tartalmazza. A kérelemben használt címke hozzá van fűzve a név végéhez. Ha nincs beállítva címke, a karakter \0 üres helyként jelenik meg.

Konfiguráció betöltése

A kódtár egy vagy több alkalmazáskonfigurációs tároló betöltését támogatja. Abban az esetben, ha egy kulcs több üzletben duplikálva van, az összes üzlet betöltése a legmagasabb prioritású tárolók konfigurációját eredményezi. Az utolsó nyer. Ezt a folyamatot az alábbi példában szemlélteti:

spring.cloud.azure.appconfiguration.stores[0].connection-string=[first-store-connection-string]
spring.cloud.azure.appconfiguration.stores[1].connection-string=[second-store-connection-string]

A példában, ha az első és a második tároló is ugyanazzal a konfigurációval rendelkezik, a második tároló konfigurációja a legmagasabb prioritással rendelkezik, és az utolsó nyer.

Feljegyzés

Használhatja Azure-alkalmazás konfigurációs beállításokat, mint bármely más Spring-konfigurációt. További információ: Alapvető funkciók a Spring Boot dokumentációjában vagy rövid útmutató: Java Spring-alkalmazás létrehozása Azure-alkalmazás konfigurációval.

Konfigurációk kiválasztása

A konfigurációkat a kulcs és a címke tölti be. Alapértelmezés szerint a kulccsal /application/ kezdődő konfigurációk betöltődnek. Az alapértelmezett címke a következő ${spring.profiles.active}: . Ha ${spring.profiles.active} nincs beállítva, a rendszer betölti a null címkével rendelkező konfigurációkat. A null címke az Azure Portalon látható módon (No Label) jelenik meg.

A betöltött konfigurációkat különböző kulcs- és címkeszűrők kiválasztásával konfigurálhatja, ahogyan az alábbi példában látható:

spring.cloud.azure.appconfiguration.stores[0].selects[0].key-filter=[my-key]
spring.cloud.azure.appconfiguration.stores[0].selects[0].label-filter=[my-label]

A key-filter tulajdonság a következő szűrőket támogatja:

Kulcsszűrő Hatály
* Bármely kulccsal megegyezik.
abc Megegyezik egy névvel rendelkező abckulccsal.
abc* A következővel abckezdődő kulcsneveknek felel meg: .
abc,xyz A kulcsnevek abc vagy xyza . Legfeljebb öt vesszővel tagolt érték lehet.

A label-filter tulajdonság a következő szűrőket támogatja:

Címke Leírás
* Egyezik a címkével, beleértve a \0.
\0 Megfelel az null Azure Portalon megjelenő (No Label) címkéknek.
1.0.0 Pontosan egyezik a címkével 1.0.0 .
1.0.* Megegyezik a következővel kezdődő címkékkel 1.0.*: .
,1.0.0 A címkék null és a 1.0.0. Legfeljebb öt vesszővel tagolt érték lehet.

Ha a YAML-et címkeszűrőkkel használja, és ezzel kell kezdenie null, akkor a címkeszűrőt egyetlen idézőjelekkel kell körülvenni, ahogyan az alábbi példában látható:

spring:
  cloud:
    azure:
      appconfiguration:
        stores:
        - selects:
          - label-filter: ',1.0.0'

Feljegyzés

A szűrőkkel nem kombinálható *, . Ebben az esetben további kiválasztási értéket kell használnia.

Rugós profilok

Alapértelmezés szerint spring.profiles.active az összes kiválasztott konfiguráció alapértelmezett label-filter értéke. Ezt a funkciót felülbírálhatja a következővel label-filter: . A Spring Profiles a következő példában label-filter${spring.profiles.active}látható módon használható:

spring.cloud.azure.appconfiguration.stores[0].selects[0].label-filter=,${spring.profiles.active}
spring.cloud.azure.appconfiguration.stores[0].selects[1].label-filter=${spring.profiles.active}_local

Az elsőben label-filtera címkével ellátott null összes konfiguráció betöltődik, majd az összes olyan konfiguráció, amely megfelel a Spring Profilesnak. A spring profiles prioritást élvez a null konfigurációkkal szemben, mert a végén vannak.

A másodikban label-filtera sztring _local hozzá van fűzve a spring profiles végéhez, bár csak az utolsó Spring Profilehez.

Letiltott üzletek

A konfiguráció spring.cloud.azure.appconfiguration.enabledhasználatával letilthatja az összes konfigurációs tároló betöltését. A spring.cloud.azure.appconfiguration.stores[0].enabled konfigurációval letilthat egy adott tárolót.

Az áruházak letiltása mellett konfigurálhatja, hogy az áruházak le legyenek tiltva, ha nem töltődnek be. Ehhez a konfigurációhoz használja a következőt spring.cloud.azure.appconfiguration.stores[0].fail-fast: . Ha fail-fast le van tiltva a beállításával false, RuntimeException az alkalmazástároló le van tiltva, és nincs benne konfiguráció. Ha egy konfigurációs tár indításkor le van tiltva, a rendszer nem ellenőrzi a módosításokat a frissítéskor. Emellett a konfigurációk frissítésekor nem kísérel meg értékeket betölteni belőle.

Ha a frissítés ellenőrzésekor vagy a konfigurációk újrabetöltése közben előforduló hiba RuntimeException miatt a frissítési kísérlet befejeződik, és a rendszer újrapróbálkozásba kerül.refresh-interval

Hitelesítés

A kódtár az Azure Identity Library által támogatott összes identitásformát támogatja. Hitelesítést kapcsolati sztring és felügyelt identitás konfigurációja segítségével végezhet.

Kapcsolati sztring

A kapcsolati sztring keresztüli hitelesítés a legegyszerűbb beállítási űrlap. Az áruház kapcsolati sztring az alábbi paranccsal érheti el:

az appconfig credential list --name <name-of-your-store>

Ezután beállíthatja a spring.cloud.azure.appconfiguration.stores[0].connection-string tulajdonságot a kapcsolati sztring. Javasoljuk, hogy a helyi konfigurációs fájlban található kapcsolati sztring olyan helyőrző értékre állítsa, amely egy környezeti változóhoz lesz megfeleltetve. Ezzel a módszerrel elkerülheti a kapcsolati sztring forrásvezérlőhöz való hozzáadását.

Spring Cloud Azure-konfiguráció

A spring cloud Azure-konfigurációval konfigurálhatja a kódtárat. A kódtár konfigurálásához az alábbi tulajdonságokat használhatja:

spring.cloud.azure.appconfiguration.stores[0].endpoint= <URI-of-your-configuration-store>

Ha csak a végpont van beállítva, az ügyfélkódtár a DefaultAzureCredential parancsot használja a hitelesítéshez. A DefaultAzureCredential hitelesítéshez a következő módszereket használják:

  • Környezeti hitelesítő adatok
  • Felügyelt identitás hitelesítő adatai
  • Azure Developer CLI-hitelesítő adatok
  • IntelliJ hitelesítő adatok
  • Azure CLI-hitelesítő adatok
  • Azure PowerShell-hitelesítő adatok

Ki kell osztania egy identitást, például egy rendszer által hozzárendelt identitást az olvasási konfigurációkhoz. Ezt a feladatot a következő paranccsal hozhatja létre:

az role assignment create \
    --role "App Configuration Data Reader" \
    --assignee <your-client-ID> \
    --scope /subscriptions/<your-subscription>/resourceGroups/<your-stores-resource-group>/providers/Microsoft.AppConfiguration/configurationStores/<name-of-your-configuration-store>

Feljegyzés

Végpontonként csak egy hitelesítési módszert definiálhat: kapcsolati sztring, felhasználó által hozzárendelt identitást vagy jogkivonat hitelesítő adatait. Ha össze kell kevernie és egyeznie kell, ConfigurationClientCustomizer módosíthatja az eltérő metódust használó tárolókat.

Georeplikáció

A kódtár támogatja Azure-alkalmazás Konfiguráció georeplikációs funkcióját. Ez a funkció lehetővé teszi, hogy más helyekre replikálja az adatokat. Ez a funkció a magas rendelkezésre állás és a vészhelyreállítás szempontjából hasznos.

Minden létrehozott replika rendelkezik egy dedikált végpontkal. Ha az alkalmazás több földrajzi helyen található, frissítheti az alkalmazás minden üzembe helyezését egy helyen, hogy a replikához az adott helyhez közelebb csatlakozzon, ami segít minimalizálni az alkalmazás és az alkalmazáskonfiguráció közötti hálózati késést. Mivel minden replika külön kérelemkvótával rendelkezik, ez a beállítás az alkalmazás méretezhetőségét is segíti, miközben többrégiós elosztott szolgáltatásra nő.

A feladatátvétel akkor fordulhat elő, ha az erőforrástár a következő feltételek valamelyikét észleli:

  • A szolgáltatás nem érhető el állapotkóddal (HTTP 500 vagy újabb) érkező válaszokat fogad egy végpontról.
  • Hálózati csatlakozási problémákat tapasztal.
  • A kérelmek szabályozva vannak (HTTP-állapotkód: 429).

Konfigurációs tároló létrehozása georeplikációs szolgáltatással

A konfigurációs tár replikáinak létrehozásához használhatja az Azure CLI-t vagy az Azure Portalt. Az alábbi példa az Azure CLI használatával hoz létre replikát az USA 2. keleti régiójában:

az appconfig replica create --location --name --store-name [--resource-group]

A konfigurációs tár replika használata

Miután létrehozott egy replikát, használhatja azt az alkalmazásban. A forrástárhoz hasonlóan Microsoft Entra-azonosítóval vagy kapcsolati sztring is csatlakozhat a replikához.

Ha a Microsoft Entra ID-t szeretné használni a replikához való csatlakozáshoz, fel kell sorolnia a endpoints konfigurációs tár példányait, ahogyan az alábbi példában látható:

spring.cloud.azure.appconfiguration.stores[0].endpoints[0]=[your primary store endpoint]
spring.cloud.azure.appconfiguration.stores[0].endpoints[1]=[your replica store endpoint]

Annyi végpontot listázhat, amennyi replikával rendelkezik. A kódtár a felsorolt sorrendben próbál csatlakozni a végpontokhoz. Ha a tár nem tud csatlakozni egy replikához, megpróbálja a következőt a listában. Egy idő letelte után a kódtár megpróbálja újracsatlakozni az előnyben részesített végpontokhoz.

Kulcsértékek

Azure-alkalmazás Konfiguráció több kulcsértéktípust támogat, amelyek közül néhány speciális funkciókkal rendelkezik. Azure-alkalmazás konfiguráció beépített támogatást nyújt a JSON-tartalomtípushoz, a Spring-helyőrzőkhöz és a Key Vault-hivatkozásokhoz.

Helyőrzők

A kódtár támogatja a -style környezeti helyőrzőkkel rendelkező ${}konfigurációkat. Ha Azure-alkalmazás konfigurációs kulcsra hivatkozik helyőrzővel, távolítsa el az előtagokat a hivatkozásból. A hivatkozás például /application/config.message a következőként ${config.message}van hivatkozva: .

Feljegyzés

Az eltávolított előtag megegyezik az értékkel spring.cloud.azure.appconfiguration.stores[0].selects[0].key-filter.

JSON

A tartalomtípusú application/json konfigurációk JSON-objektumként vannak feldolgozva. Ez a funkció lehetővé teszi, hogy egy konfigurációt egy összetett objektumhoz rendeljen egy @ConfigurationProperties. Vegyük például a JSON-kulcsot /application/config.colors a következő értékkel:

{
 "Red": {
  "value": [255, 0, 0]
 },
 "Blue": {
  "value": [0, 255, 0]
 },
 "Green": {
  "value": [0, 0, 255]
 }
}

Ez a kulcs a következő kódra képez le:

@ConfigurationProperties(prefix = "config")
public class MyConfigurations {

    private Map<String, Color> colors;

}

Key Vault-hivatkozások

Azure-alkalmazás konfiguráció és kódtárai támogatják a Key Vaultban tárolt titkos kódokra való hivatkozásokat. Az Alkalmazáskonfigurációban kulcsokat hozhat létre olyan értékekkel, amelyek a Key Vaultban tárolt titkos kulcsokhoz vannak megfeleltetve. A titkos kulcsok biztonságosan vannak tárolva a Key Vaultban, de ugyanúgy érhetők el, mint bármely más konfiguráció a betöltése után.

Az alkalmazás az ügyfélszolgáltatóval kéri le a Key Vault-referenciákat, ugyanúgy, mint az Alkalmazáskonfigurációban tárolt többi kulcs esetében. Mivel az ügyfél Key Vault-hivatkozásként ismeri fel a kulcsokat, egyedi tartalomtípussal rendelkezik, és az ügyfél a Key Vaulthoz csatlakozva lekéri az értékeit.

Feljegyzés

A Key Vault csak egyenként teszi lehetővé a titkos kulcsok lekérését, így az alkalmazáskonfigurációban tárolt összes Key Vault-referencia lekérést eredményez a Key Vaulton.

Key Vault-hivatkozások létrehozása

Key Vault-referenciát az Azure Portalon a Configuration Explorer>Create Key Vault-referenciával hozhat létre.> Ezután kiválaszthat egy titkos kulcsot, amelyre hivatkozni szeretne bármelyik olyan Kulcstartóból, amelyhez hozzáférése van. A Bevitel lapon tetszőleges Key Vault-hivatkozásokat is létrehozhat. Az Azure Portalon adjon meg egy érvényes URI-t.

Key Vault-referenciát az Azure CLI-vel is létrehozhat az alábbi paranccsal:

az appconfig kv set-keyvault \
    --name <name-of-your-store> \
    --key <key-name> \
    --secret-identifier <URI-to-your-secret>

Bármilyen titkos azonosítót létrehozhat az Azure CLI-vel. A titkos azonosítók csak azt a formátumot {vault}/{collection}/{name}/{version?} igénylik, amelyben a verziószakasz nem kötelező.

Key Vault-hivatkozások használata

A spring cloud Azure-konfigurációval konfigurálhatja a kódtárat. Az Azure Key Vaulthoz való csatlakozáshoz használhatja ugyanazt a hitelesítő adatot, amelyet az alkalmazáskonfigurációhoz használ.

Nem Key Vault-titkos kulcsok feloldása

Az alkalmazáskonfigurációs kódtár olyan titkos kulcsok helyi feloldására szolgál, amelyekhez nincs kulcstartó társítva. Ez a megoldás a KeyVaultSecretProvider. A KeyVaultSecretProvider rendszer akkor hívja meg, TokenCredential ha nincs megadva a Key Vault-referenciához. A Key Vault-referencia URI-ja meg van adva, és a visszaadott érték lesz a titkos kód értéke.

Figyelmeztetés

A rendszer által hozzárendelt KeyVaultSecretProvider felügyelt identitás automatikus használata felülbírálható. Mindkettő használatához használnia KeyVaultCredentialProvider kell és vissza kell térnie null a feloldást igénylő URI-khoz.

public class MySecretProvider implements KeyVaultSecretProvider {

    @Override
    public String getSecret(String uri) {
        ...
    }

}

Funkciókezelés

A funkciókezelés lehetővé teszi, hogy a Spring Boot-alkalmazások dinamikusan elérhessék a tartalmakat. A funkciókezelés különböző funkciókkal rendelkezik, például a következőkkel:

  • Tartalom engedélyezésére vagy letiltására alkalmas funkciójelzők
  • Funkciószűrők a tartalom megjelenítésekor történő célzáshoz
  • Testreszabott funkciószűrők
  • Funkciókapuk a végpontok dinamikus engedélyezéséhez

A funkciójelzőket a következő konfigurációval engedélyezheti:

spring.cloud.azure.appconfiguration.stores[0].feature-flags.enabled= true

Az engedélyezett funkciójelzők az előtaggal feature-managementtöltődnek be a Spring konfigurációs rendszerbe. A funkciójelzőket a helyi konfigurációs fájlban is regisztrálhatja. További információt a Funkciójelölő deklaráció szakaszában talál.

A funkciókezelés használatának legegyszerűbb módja a kódtárak és spring-cloud-azure-feature-management-web a spring-cloud-azure-feature-management kódtárak használata. A két kódtár között az a különbség, hogy spring-cloud-azure-feature-management-web a függvénytárak és spring-webmvc a spring-web tárak függenek a további funkciók, például a funkciókapuk hozzáadásához.

A funkciójelzőket kulcs-/címkeszűrőkkel engedélyezheti. Alapértelmezés szerint a rendszer hozzárendel egy címkét null , amely a (No Label)következőképpen néz ki. Az alábbi példában látható módon egy címkeszűrő beállításával konfigurálhatja a betöltött funkciójelzőket:

spring.cloud.azure.appconfiguration.stores[0].feature-flags.selects[0].key-filter=A*
spring.cloud.azure.appconfiguration.stores[0].feature-flags.selects[0].label-filter= dev

A szolgáltatáskezelés alapjai

Funkciójelölők

A funkciójelzők két részből állnak: egy névből és a funkció bekapcsolásához használt funkciószűrők listájából. A funkciójelzők logikai állapotú be- és kikapcsolt állapotban lehetnek, vagy a funkciószűrők listájával is rendelkezhetnek. A funkciójelölők addig értékelik a funkciószűrőket, amíg az egyik vissza nem ad true. Ha nem ad vissza funkciószűrőt true, akkor a funkciójelző visszaadja false.

Funkciószűrők

A funkciószűrők meghatároznak egy forgatókönyvet, amikor engedélyezni kell egy funkciót. A funkciószűrők kiértékelése szinkron módon történik.

A szolgáltatásfelügyeleti kódtár négy előre definiált szűrővel rendelkezik: AlwaysOnFilter, PercentageFilter, TimeWindowFilter és TargetingFilter.

Egyéni funkciószűrőket is létrehozhat. Egy funkciószűrővel például egyéni élményt biztosíthat a Microsoft Edge böngészőt használó ügyfelek számára. A funkciószűrő funkcióit testreszabhatja például a Microsoft Edge böngésző célközönségének egy adott fejlécének megjelenítéséhez.

Funkciójelző deklarációja

A szolgáltatásfelügyeleti kódtár támogatja a Azure-alkalmazás konfigurációt, valamint application.yml vagy bootstrap.yml a funkciójelölők forrásaként. Íme egy példa a funkciójelölők application.yml fájlban való beállításához használt formátumra:

feature-management:
  feature-t: false
  feature-u:
    enabled-for:
    - name: Random
  feature-v:
    enabled-for:
    - name: TimeWindowFilter
      parameters:
        Start: "Wed, 01 May 2019 13:59:59 GMT"
        End: "Mon, 01 July 2019 00:00:00 GMT"
  feature-w:
    evaluate: false
    enabled-for:
    - name: AlwaysOnFilter

Ebben a példában a következő funkciójelölők szerepelnek:

  • feature-t beállítás értéke : false. Ez a beállítás mindig a funkciójelző értékét adja vissza.
  • feature-u funkciószűrőkkel használható. Ezek a szűrők a tulajdonság alatt vannak definiálva enabled-for . Ebben az esetben feature-u egy funkciószűrő van meghívva Random, amely nem igényel konfigurációt, ezért csak a névtulajdonság szükséges.
  • feature-v a nevű szolgáltatásszűrőt TimeWindowFilteradja meg. Ez a szolgáltatásszűrő átadható konfigurációként használandó paramétereknek. Ebben a példában egy TimeWindowFilter, a szolgáltatás aktív kezdési és befejezési időszakában halad át.
  • feature-w a rendszer az AlwaysOnFilter, amely mindig kiértékeli a következőt true: . A evaluate mező a funkciószűrők kiértékelésének leállítására szolgál, és a funkciószűrő mindig visszatér false.

Funkciójelzők kiértékelése

A spring-cloud-azure-feature-management kódtár segítségével FeatureManager megállapíthatja, hogy engedélyezve van-e egy funkciójelző. FeatureManager aszinkron módon ellenőrzi a jelölő állapotát.

spring-cloud-azure-feature-management-weba beállítás FeatureManagermellett tartalmazza FeatureManagerSnapshotazt is, amely gyorsítótárazza a korábban kiértékelt funkciójelzők állapotát, @RequestScope így garantálva, hogy minden kérés ugyanazt az értéket adja vissza. Emellett a webtár is biztosít @FeatureGate, amely letilthatja vagy átirányíthatja a webes kérelmeket különböző végpontokra.

Funkciójelző ellenőrzése

FeatureManager az a @Bean típusobjektumok közé illeszthető vagy beszúrható @Autowired@Component . FeatureManager olyan metódussal isEnabled rendelkezik, amely a funkciójelző nevének átadásakor visszaadja az állapotát.

@Autowired
FeatureManager featureManager;

if (featureManager.isEnabled("feature-t")) {
    // Do Something
}

Feljegyzés

FeatureManger A aszinkron verzióját isEnabled is tartalmazza isEnabledAsync.

Ha még nem konfigurálta a szolgáltatáskezelést, vagy a funkciójelző nem létezik, isEnabled mindig ad vissza false. Ha egy meglévő funkciójelző ismeretlen funkciószűrővel van konfigurálva, akkor a rendszer egy jelölőt FilterNotFoundException ad meg. Ezt a viselkedést a következőre konfigurálva falsefail-fast módosíthatja:false Az alábbi táblázat a következőket ismerteti fail-fast:

Név Leírás Kötelező Alapértelmezett
spring.cloud.azure.feature.management.fail-fast Kivétel esetén a rendszer egy RuntimeException hibát ad ki. Ha ez a tulajdonság be van állítva false, akkor a isEnabled visszaadott érték lesz false . Nem true

Az egyetlen különbség FeatureManagerSnapshotFeatureManager az eredmények @RequestScopegyorsítótárazása a .

Funkciókapu

A szolgáltatásfelügyeleti webtárban megkövetelheti, hogy egy adott funkció engedélyezve legyen egy végpont végrehajtásához. Ezt a követelményt a @FeatureGate széljegyzet használatával állíthatja be, ahogyan az alábbi példában látható:

@GetMapping("/featureT")
@FeatureGate(feature = "feature-t")
@ResponseBody
public String featureT() {
    ...
}

A végpontot csak akkor érheti el, ha a featureT "feature-t" engedélyezve van.

Letiltott műveletkezelés

Ha egy végpont le van tiltva, mert az általa megadott funkció le van tiltva, DisabledFeaturesHandler a rendszer meghívja. Alapértelmezés szerint a rendszer egy HTTP 404-et ad vissza. Ezt a viselkedést a implementálással DisabledFeaturesHandlerfelülbírálhatja, ahogy az a következő példában is látható:

@Component
public class MyDisabledFeaturesHandler implements DisabledFeaturesHandler {

    @Override
    public HttpServletResponse handleDisabledFeatures(HttpServletRequest request, HttpServletResponse response) {
        ...
        return response;
    }

}
Útválasztás

Bizonyos útvonalak olyan alkalmazásképességeket tehetnek elérhetővé, amelyeket a funkciók érnek el. Ha egy funkció le van tiltva, átirányíthatja ezeket az útvonalakat egy másik végpontra, ahogyan az alábbi példában látható:

@GetMapping("/featureT")
@FeatureGate(feature = "feature-t" fallback= "/oldEndpoint")
@ResponseBody
public String featureT() {
    ...
}

@GetMapping("/oldEndpoint")
@ResponseBody
public String oldEndpoint() {
    ...
}

Beépített funkciószűrők

Van néhány funkciószűrő, amelyek a spring-cloud-azure-feature-management csomaghoz tartoznak. Ezek a funkciószűrők nem lesznek automatikusan hozzáadva, de beállíthatja őket egy @Configuration.

AlwaysOnFilter

Ez a szűrő mindig ad vissza true. Használati példaként tekintse meg a funkciójelző deklarálási szakaszát.

Százalékszűrő

Minden alkalommal, amikor egy felhasználó kérést küld, a kiértékelése PercentageFilter más eredményt adhat vissza. Ezt az inkonzisztencia megkerülését a FeatureManagementSnapshotfelhasználónkénti funkciójelölő eredményének gyorsítótárazásával teheti meg. Ez a funkció biztosítja, hogy a felhasználó konzisztens felhasználói élményben legyen része, még akkor is, ha újra kell küldenie a kérést.

feature-management:
  feature-v:
    enabled-for:
    - name: PercentageFilter
      parameters:
        Value: 50

TimeWindowFilter

Ez a szűrő lehetővé teszi egy szolgáltatás időkereten alapuló engedélyezését. Ha csak Endezt a lehetőséget adja meg, a szolgáltatás addig is be van kapcsolva. Ha csak Startazt adja meg, a szolgáltatás az adott időpont után minden ponton figyelembe lesz véve. Ha mindkettőt megadja, a szolgáltatás a két időpont között érvényesnek minősül.

feature-management:
  feature-v:
    enabled-for:
    - name: TimeWindowFilter
      parameters:
        Start: "Wed, 01 May 2019 13:59:59 GMT",
        End: "Mon, 01 July 2019 00:00:00 GMT"

TargetingFilter

Ez a szűrő lehetővé teszi egy szolgáltatás engedélyezését a célközönség számára. A célzás részletes magyarázatát a célzás szakaszában találja. A szűrőparaméterek közé tartozik egy célközönségobjektum, amely a felhasználókat, csoportokat és a felhasználói bázis azon alapértelmezett százalékos arányát írja le, amelyeknek hozzáféréssel kell rendelkezniük a szolgáltatáshoz. A célközönségben felsorolt összes csoportobjektumhoz szükség van egy százalékra, amely meghatározza a csoport azon tagjainak százalékos arányát, amelyek hozzáférnek a funkcióhoz. A felhasználó a következő esetekben engedélyezve van a szolgáltatással:

  • A felhasználó közvetlenül a felhasználók szakaszában van megadva.
  • A felhasználó a csoport bevezetésének százalékos arányában szerepel.
  • A felhasználó az alapértelmezett bevezetési százalékra esik.
feature-management: 
  target:
    enabled-for:
    - name: targetingFilter
      parameters:
        users:
        - Jeff
        - Alicia
        groups:
        - name: Ring0
          rollout-percentage: 100
        - name: Ring1
          rolloutPercentage: 100
        default-rollout-percentage: 50

Egyéni funkciószűrők

Egyéni szolgáltatásszűrő létrehozása lehetővé teszi a szolgáltatások engedélyezését az Ön által megadott feltételek alapján. Egyéni funkciószűrő létrehozásához implementálnia kell a FeatureFilter felületet. FeatureFilter egyetlen metódussal evaluaterendelkezik. Ha egy szolgáltatás megadja, hogy egy funkciószűrővel engedélyezhető legyen, a evaluate metódus meghívása történik. Ha evaluate visszaadja true, az azt jelenti, hogy a funkciót engedélyezni kell. Ha visszaadja false, a funkciószűrők kiértékelése mindaddig folytatódik, amíg vissza nem tér true. Ha az összes szűrő visszatér false, akkor a funkció ki van kapcsolva.

A funkciószűrők Spring Beans-ként vannak definiálva, így @Component@Configurationvagy egy .

@Component("Random")
public class Random implements FeatureFilter {

    @Override
    public boolean evaluate(FeatureFilterEvaluationContext context) {
        double chance = Double.valueOf((String) context.getParameters().get("chance"));
        return Math.random() > chance / 100;
    }

}

Paraméteres funkciószűrők

Egyes funkciószűrőkhöz paraméterek szükségesek annak meghatározásához, hogy be kell-e kapcsolni egy funkciót. Előfordulhat például, hogy egy böngészőfunkció-szűrő bekapcsol egy funkciót bizonyos böngészőkben. Előfordulhat, hogy engedélyezni szeretne egy funkciót a Microsoft Edge- és Chrome-böngészőkben, a Firefoxban azonban nem. A helyzet beállításához létrehozhat egy funkciószűrőt, amely paramétereket vár. Ezek a paraméterek a szolgáltatáskonfigurációban és a kódban lesznek megadva, és a FeatureFilterEvaluationContextevaluateparaméteren keresztül érhetők el. FeatureFilterEvaluationContext van egy tulajdonsága parameters, amely egy HashMap<String, Object>.

Célcsoportkezelés

A célzás egy funkciókezelési stratégia, amely lehetővé teszi a fejlesztők számára, hogy fokozatosan új funkciókat vezessenek be a felhasználói bázisukra. A stratégia a célközönségként ismert felhasználók egy csoportjának megcélzására épül. A célközönség meghatározott felhasználókból, csoportokból és a teljes felhasználói bázis meghatározott százalékából áll. A közönségbe felvett csoportok további bontásban, a teljes tagok százalékos arányára bonthatók.

Az alábbi lépések egy új bétaverziós funkció fokozatos bevezetésére mutatnak be példát:

  1. Az egyes felhasználók Jeff és Alicia kapnak hozzáférést a bétaverzióhoz.
  2. Egy másik felhasználó, Mark, kéri, hogy jelentkezzen be, és szerepel benne.
  3. A "Ring1" nevű csoport felhasználóinak húsz százaléka szerepel a bétaverzióban.
  4. A bétaverzióban szereplő "Ring1" felhasználók száma 100%-ra csökken.
  5. A felhasználói bázis öt százaléka szerepel a bétaverzióban.
  6. A bevezetési százalék akár 100 százalék is lehet, és a funkció teljesen ki lett adva.

Ez a funkció üzembehelyre kerülési stratégiája a beépített TargetingFilter funkciószűrőn keresztül van beépítve a kódtárba.

Célzás egy alkalmazásban

A célzási funkciószűrőt használó példa webalkalmazás a példaprojektben érhető el.

Az alkalmazás használatának TargetingFilter megkezdéséhez hozzá kell adnia @Bean , mint bármely más funkciószűrőt. TargetingFilteraz alkalmazáshoz TargetingContextAccessorhozzáadandó másikra @Bean támaszkodik. Ez TargetingContextAccessor lehetővé teszi az aktuális felhasználóazonosító és -csoportok meghatározásához használni kívánt aktuális TargetingContext érték meghatározását, ahogyan az alábbi példában látható:

public class MyTargetingContextAccessor implements TargetingContextAccessor {

    @Override
    public void getContextAsync(TargetingContext context) {
        context.setUserId("Jeff");
        ArrayList<String> groups = new ArrayList<String>();
        groups.add("Ring0");
        context.setGroups(groups);
    }

}

A kiértékelési lehetőségek célzása

A beállítások segítségével testre szabhatja, hogyan történik a célértékelés végrehajtása egy adott TargetingFilter. A létrehozás során megadhat egy opcionális paramétertTargetingEvaluationOptionsTargetingFilter.

    @Bean
    public TargetingFilter targetingFilter(MyTargetingContextAccessor contextAccessor) {
        return new TargetingFilter(contextAccessor, new TargetingEvaluationOptions().setIgnoreCase(true));
    }

Konfiguráció frissítése

A konfigurációk konfigurációfrissítésének engedélyezésével az alkalmazás újraindítása nélkül lekérheti a legújabb értékeket az Alkalmazáskonfigurációs áruházból vagy -tárolóból.

A frissítés engedélyezéséhez engedélyeznie kell a monitorozást és a monitorozási eseményindítókat. A figyelési eseményindítók olyan kulcsok, amelyek opcionális címkével ellátottak, és értékmódosításokat ellenőriznek a frissítések aktiválásához. A monitorozási eseményindító értéke bármilyen érték lehet, ha frissítésre van szükség.

Feljegyzés

Minden olyan művelet, amely módosítja a monitorozási eseményindító ETag-azonosítóját, frissítést okoz, például tartalomtípus-módosítást.

spring:
  cloud:
    azure:
      appconfiguration:
        stores:
        - monitoring:
          enabled: true
          triggers:
          - key: [my-watched-key]
            label: [my-watched-label]

Konfigurációfrissítés aktiválásához módosítsa egy kulcs értékét a konfigurációs tárban. Ezután frissítse az egyik órakulcsot egy új értékre. Ez a módosítás elindítja a napló létrehozását. Az eseményindítók értékének /application/config.message módosítása például a következő naplóüzenet:

INFO 17496 --- [TaskScheduler-1] o.s.c.e.event.RefreshEventListener       : Refresh keys changed: [config.message]

Miután az alkalmazás létrehozta a naplót, a frissítési hatókörben lévő összeset @Beanfrissíti.

Feljegyzés

Alapértelmezés szerint a @ConfigurationProperties jegyzetekkel ellátott babok szerepelnek ebben a hatókörben.

Lekéréses alapú frissítés

Az alkalmazáskonfigurációs spring-kódtárak támogatják a figyelési eseményindítókon végrehajtott módosítások frissítési időközeinek rendszeres ellenőrzését. Alapértelmezés szerint a frissítési időköz 30 másodpercre van állítva. A frissítési időköz leteltét követően a rendszer az összes eseményindítót az adott tárolóban ellenőrzi a módosításokhoz. A kulcs módosítása esetén a frissítés aktiválódik. Mivel a kódtárak integrálva vannak a Spring frissítési rendszerrel, minden frissítés újra betölti az összes konfigurációt az összes áruházból. A frissítési időközt tetszőleges, 1 másodpercnél hosszabb időközre állíthatja be. A frissítési időköz smhd támogatott egységei a másodpercek, percek, órák és napok. Az alábbi példa 5 percre állítja a frissítési időközt:

spring.cloud.azure.appconfiguration.stores[0].monitoring.refresh-interval= 5m

Automatizált

A kódtár használatakor az spring-cloud-azure-appconfiguration-config-web alkalmazás automatikusan ellenőrzi a frissítést, amikor egy servlet-kérés történik, különösen ServletRequestHandledEvent. Az esemény küldésének leggyakoribb módja a végpontoknak küldött kérések @RestController.

Manuális

A csak spring-cloud-azure-appconfiguration-configa konzolalkalmazásokat használó alkalmazásokban manuálisan is aktiválhat frissítést a metódus meghívásávalAppConfigurationRefreshrefreshConfiguration. AppConfigurationRefresh az a @Bean , hogy lehet beadni bármely @Component.

Mivel a kódtár a Spring konfigurációs rendszerét használja, a frissítés aktiválása az összes konfiguráció frissítését eredményezi, nem csak a Azure-alkalmazás Konfigurációtárból származó konfigurációk újratöltését.

Leküldéses alapú frissítés

Beállíthatja, hogy a spring-cloud-azure-appconfiguration-config-web kódtár leküldéses értesítéseket kapjon a Azure-alkalmazás Konfigurációs tárból a konfigurációs értékek frissítéséhez. Ezt a konfigurációt egy Azure Event Grid Web Hook használatával állíthatja be, amely konfigurálható úgy, hogy értesítéseket küldjön a megadott kulcsok módosításairól. Ha függőségként hozzáadja a Spring Actuator-kódtárat, közzéteheti az alkalmazáskonfiguráció frissítési végpontjait. Két különböző végpont létezik: appconfiguration-refresh és appconfiguration-refresh-bus. Ezek a végpontok a megfelelőikhez refresh hasonlóan működnek, és refresh-busahol az alkalmazáskonfigurációs végpontok a frissítési időközt lejárják ahelyett, hogy frissítésre kényszerítenek a fogadáskor. Továbbra is használhatja az refresh és refresh-bus, de nem csatlakoztathatja őket közvetlenül az Azure Event Gridhez webhook használatával, mert a beállításhoz válaszra van szükség.

A appconfiguration-refresh tulajdonság lejár a frissítési időközt, így a fennmaradó frissítési időköz nem vár a következő frissítési ellenőrzés előtt. A appconfiguration-refresh-bus tulajdonság értesítést küld egy csatlakoztatott üzenetküldő szolgáltatásnak, például az Azure Service Busnak, amely értesíti egy alkalmazás összes frissítési példányát. Mindkét esetben nem jár le teljesen a frissítési időközön belül, de kis mennyiségű jitter ki van kapcsolva. Ez a jitter biztosítja, hogy az alkalmazás minden példánya ne kíséreljen meg egyszerre frissíteni.

management.endpoints.web.exposure.include= appconfiguration-refresh, appconfiguration-refresh-bus

A frissítési végpontok felfedése mellett a rendszer hozzáad egy szükséges lekérdezési paramétert a biztonság érdekében. Alapértelmezés szerint nincs megadva jogkivonat neve vagy értéke, de a végpontok használatához szükség van egy beállításra, ahogyan az alábbi példában látható:

spring.cloud.azure.appconfiguration.stores[0].monitoring.push-notification.primary-token.name=[primary-token-name]
spring.cloud.azure.appconfiguration.stores[0].monitoring.push-notification.primary-token.secret=[primary-token-secret]
spring.cloud.azure.appconfiguration.stores[0].monitoring.push-notification.secondary-token.name=[secondary-token-name]
spring.cloud.azure.appconfiguration.stores[0].monitoring.push-notification.secondary-token.secret=[secondary-token-secret]

Webes horgok beállítása

Webes horog beállításához nyissa meg a Azure-alkalmazás Konfigurációs tárat, és nyissa meg az Események parancsot a navigációs menüből. Ezután válassza az Esemény-előfizetés lehetőséget. Adja meg az esemény nevét, és válassza ki a webhook végponttípusát. A Web Hook kiválasztásakor megjelenik egy végpontbeállítás . Válassza a Végpont kiválasztása lehetőséget. A végpontnak a következő példához hasonlóan kell kinéznie: https://www.myaplication.com/actuator/appconfiguration-refresh?myTokenName=mySecret.

Erősítse meg, hogy a Kijelölés beállítási értesítést küld a megadott URI-nak, és választ vár. Ha nem ad vissza választ, a telepítés meghiúsul. A azure-spring-cloud-appconfiguration-web végpontok kódtárbeállítása a megfelelő választ adja vissza, ha a Azure-alkalmazás konfigurációs tár az alkalmazáshoz van konfigurálva. Ezt a visszaigazolást más módon is elküldheti. A webhook kézbesítéséről további információt a Webhook eseménykézbesítésében talál.

Feljegyzés

Ez az ellenőrzés csak a végpont létrehozásakor vagy módosításakor történik.

Javasoljuk, hogy állítson be szűrőket, mert ellenkező esetben a rendszer minden kulcs létrehozása és módosítása után elindít egy frissítést.

Kényszerített ügyfélfrissítés

A kódtár úgy konfigurálható, hogy frissítési időközzel kényszerítse az összes konfiguráció frissítését. A következő táblázat a tulajdonságot refresh-interval ismerteti:

Név Leírás Kötelező Alapértelmezett
spring.cloud.azure.appconfiguration.refresh-interval A frissítések közötti szokásos időtartam. Ez egy Duration. Nem null

A spring.cloud.azure.appconfiguration.refresh-interval frissítés nem ellenőrzi a konfigurált órakulcsokat. Ez a tulajdonság biztosítja, hogy a Key Vault titkos kulcsai naprakészek legyenek, mert Azure-alkalmazás konfiguráció nem tudja megállapítani, hogy mikor frissülnek.

Mivel az Azure Key Vault titkos kulcsként tárolja a tanúsítvány nyilvános és titkos kulcspárját, az alkalmazás bármely tanúsítványt lekérhet Key Vault-referenciaként az Alkalmazáskonfigurációban. Mivel a tanúsítványokat rendszeres időközönként kell elforgatni, az ügyfélalkalmazásoknak ugyanolyan gyakran kell frissülnie, ami az ügyfél frissítési időközével végezhető el.

Funkciójelző frissítése

Ha a funkciójelölők és a figyelés is engedélyezve van, akkor alapértelmezés szerint a funkciójelölők frissítési időköze 30 másodpercre van állítva. A frissítési időköz leteltét követően a rendszer az összes funkciójelzőt be van jelölve az adott tárban a módosításokhoz. A kulcs módosítása esetén a frissítés aktiválódik. Mivel a kódtárak integrálva vannak a Spring frissítési rendszerrel, minden frissítés újra betölti az összes konfigurációt az összes áruházból. A frissítési időközt tetszőleges, 1 másodpercnél hosszabb időközre állíthatja be. A frissítési időköz smhd támogatott egységei a másodpercek, percek, órák és napok. Az alábbi példa 5 percre állítja a frissítési időközt:

spring.cloud.azure.appconfiguration.stores[0].monitoring.feature-flag-refresh-interval= 5m

Állapotjelző

Az ügyfélkódtár állapotjelzővel rendelkezik, amely ellenőrzi, hogy a Azure-alkalmazás konfigurációs tárolóhoz vagy tárolóhoz való kapcsolat kifogástalan-e. Ha az egyes tárolók esetében engedélyezve van, az alábbi állapotértékek egyikét adja meg:

  • UP – Az utolsó kapcsolat sikeres volt.
  • DOWN – Az utolsó kapcsolat nem 200-ból eredő hibakódot eredményezett. Ezt az állapotot a hitelesítő adatoktól a szolgáltatással kapcsolatos problémákig terjedő problémák okozhatják. Az ügyfélkódtár a következő frissítési időközön automatikusan újra megpróbál csatlakozni az áruházhoz.
  • NINCS BETÖLTVE – A konfigurációs tár a helyi konfigurációs fájlban szerepel, de a konfigurációs tár nem lett betöltve a fájlból indításkor. A konfigurációs tároló le van tiltva a konfigurációs fájlban, vagy a konfiguráció vagy konfigurációk nem töltődtek be indításkor, amíg a fail-fast tároló konfigurációja be lett állítva false.

Az állapotjelzőt a beállítással management.health.azure-app-configuration.enabled=trueengedélyezheti.

Ügyfél testreszabása

Az alkalmazáskonfigurációs kódtár a Java-hoz készült Azure SDK-t használja a Azure-alkalmazás Konfigurációhoz és az Azure Key Vaulthoz való csatlakozáshoz. Az ügyfelek módosításához két felület ConfigurationClientCustomizer , valamint SecretClientCustomizerazok vannak megadva. Minden interfész rendelkezik egy customize metódussal, amely a megfelelő szerkesztőben található, valamint az String ügyfél által konfigurált URI értékét, ahogyan az alábbi felületdefiníciókban is látható:

public interface ConfigurationClientCustomizer {
    public void setup(ConfigurationClientBuilder builder, String endpoint);
}

public interface SecretClientCustomizer {
    public void setup(SecretClientBuilder builder, String endpoint);
}

Ezek a felületek lehetővé teszik a HTTP-ügyfél és konfigurációi testreszabását. Az alábbi példa lecseréli az alapértelmezett HttpClient értéket egy másikra, amely proxyt használ az Alkalmazáskonfiguráció és a Key Vault felé irányuló összes forgalomhoz.

Feljegyzés

Az ConfigurationClientBuilder és SecretClientBuilder már be van állítva a használathoz, amikor átkerül a fájlba customize. Az ügyfelek módosításai, beleértve a hitelesítő adatokat és az újrapróbálkozási szabályzatot, felülbírálják a már meglévőket.

Ezt a konfigurációt a Spring Cloud Azure-konfigurációval is elvégezheti.

public class CustomClient implements ConfigurationClientCustomizer, SecretClientCustomizer {

    @Override
    public void customize(ConfigurationClientBuilder builder, String endpoint) {
        builder.httpClient(buildHttpClient());
    }

    @Override
    public void customize(SecretClientBuilder builder, String endpoint) {
        builder.httpClient(buildHttpClient());
    }

    private HttpClient buildHttpClient() {
        String hostname = System.getProperty("https.proxyHosts");
        String portString = System.getProperty("https.proxyPort");
        int port = Integer.valueOf(portString);

        ProxyOptions proxyOptions = new ProxyOptions(ProxyOptions.Type.HTTP,
                new InetSocketAddress(hostname, port));
        return new NettyAsyncHttpClientBuilder()
                .proxy(proxyOptions)
                .build();
    }

}