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
- Azure-előfizetés – hozzon létre egyet ingyenesen.
- A Java Development Kit (JDK) 8- vagy újabb verziója.
- Apache Maven
- Azure CLI
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_STRING
egy 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ő abc kulccsal. |
abc* |
A következővel abc kezdődő kulcsneveknek felel meg: . |
abc,xyz |
A kulcsnevek abc vagy xyz a . 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-filter
a 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-filter
a 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.enabled
haszná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-management
tö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álvaenabled-for
. Ebben az esetbenfeature-u
egy funkciószűrő van meghívvaRandom
, 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őtTimeWindowFilter
adja meg. Ez a szolgáltatásszűrő átadható konfigurációként használandó paramétereknek. Ebben a példában egyTimeWindowFilter
, a szolgáltatás aktív kezdési és befejezési időszakában halad át.feature-w
a rendszer azAlwaysOnFilter
, amely mindig kiértékeli a következőttrue
: . Aevaluate
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érfalse
.
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-web
a beállítás FeatureManager
mellett tartalmazza FeatureManagerSnapshot
azt 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 false
fail-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 FeatureManagerSnapshot
FeatureManager
az eredmények @RequestScope
gyorsí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 DisabledFeaturesHandler
felü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 FeatureManagementSnapshot
felhaszná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 End
ezt a lehetőséget adja meg, a szolgáltatás addig is be van kapcsolva. Ha csak Start
azt 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 evaluate
rendelkezik. 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
@Configuration
vagy 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 FeatureFilterEvaluationContext
evaluate
paramé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:
- Az egyes felhasználók Jeff és Alicia kapnak hozzáférést a bétaverzióhoz.
- Egy másik felhasználó, Mark, kéri, hogy jelentkezzen be, és szerepel benne.
- A "Ring1" nevű csoport felhasználóinak húsz százaléka szerepel a bétaverzióban.
- A bétaverzióban szereplő "Ring1" felhasználók száma 100%-ra csökken.
- A felhasználói bázis öt százaléka szerepel a bétaverzióban.
- 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. TargetingFilter
az alkalmazáshoz TargetingContextAccessor
hozzá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étertTargetingEvaluationOptions
TargetingFilter
.
@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 @Bean
frissí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 s
m
h
d
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-config
a konzolalkalmazásokat használó alkalmazásokban manuálisan is aktiválhat frissítést a metódus meghívásávalAppConfigurationRefresh
refreshConfiguration
. 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-bus
ahol 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 s
m
h
d
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ítvafalse
.
Az állapotjelzőt a beállítással management.health.azure-app-configuration.enabled=true
engedé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 SecretClientCustomizer
azok 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();
}
}
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: