Obsługa konfiguracji aplikacji
W tym artykule opisano bibliotekę konfiguracji platformy Spring Cloud aplikacja systemu Azure. Ta biblioteka ładuje konfiguracje i flagi funkcji z usługi konfiguracji aplikacja systemu Azure. Biblioteka generuje abstrakcje, aby pasowały PropertySource
do abstrakcji wygenerowanych już przez środowisko Spring, takie jak zmienne środowiskowe, konfiguracje wiersza polecenia, lokalne pliki konfiguracji itd.
Spring to platforma aplikacji typu open source opracowana przez oprogramowanie VMware, która zapewnia uproszczone, modułowe podejście do tworzenia aplikacji Java. Spring Cloud Azure to projekt typu open source, który zapewnia bezproblemową integrację platformy Spring z usługami platformy Azure.
Wymagania wstępne
- Subskrypcja platformy Azure — utwórz bezpłatnie.
- Zestaw Java Development Kit (JDK) w wersji 8 lub nowszej.
- Apache Maven
- Interfejs wiersza polecenia platformy Azure
Konfigurowanie magazynu usługi App Configuration
Użyj następującego polecenia, aby utworzyć magazyn konfiguracji aplikacja systemu Azure:
az appconfig create \
--resource-group <your-resource-group> \
--name <name-of-your-new-store> \
--sku Standard
To polecenie tworzy nowy, pusty magazyn konfiguracji. Konfiguracje można przekazać przy użyciu następującego polecenia importu:
az appconfig kv import \
--name <name-of-your-new-store> \
--source file \
--path <location-of-your-properties-file> \
--format properties \
--prefix /application/
Przed załadowaniem ich potwierdź konfiguracje. Pliki YAML można przekazać, zmieniając format na YAML. Pole prefiksu jest ważne, ponieważ jest to domyślny prefiks ładowany przez bibliotekę klienta.
Użycie biblioteki
Aby użyć funkcji w aplikacji, możesz ją skompilować jako aplikację Spring Boot. Najwygodniejszym sposobem dodania zależności jest użycie szablonu startowego com.azure.spring:spring-cloud-azure-starter-appconfiguration-config
Spring Boot. W poniższym przykładzie plik pom.xml używa aplikacja systemu Azure Configuration:
<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.19.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>
Uwaga
Jeśli używasz środowiska Spring Boot 2.x, pamiętaj, aby ustawić spring-cloud-azure-dependencies
wersję na 4.19.0
.
Aby uzyskać więcej informacji na temat wersji używanej dla tego modelu BOM, zobacz Która wersja platformy Spring Cloud platformy Azure powinna być używana.
W poniższym przykładzie przedstawiono podstawową aplikację Spring Boot przy użyciu usługi App Configuration:
@SpringBootApplication
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
W tym przykładzie plik bootstrap.properties zawiera następujący wiersz:
spring.cloud.azure.appconfiguration.stores[0].connection-string=${CONFIG_STORE_CONNECTION_STRING}
CONFIG_STORE_CONNECTION_STRING
jest zmienną środowiskową z parametry połączenia do magazynu konfiguracji aplikacja systemu Azure. Dostęp do parametry połączenia można uzyskać przy użyciu następującego polecenia:
az appconfig credential list --name <name-of-your-store>
Uwaga
Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Przepływ uwierzytelniania opisany w tej procedurze, taki jak bazy danych, pamięci podręczne, komunikaty lub usługi sztucznej inteligencji, wymaga bardzo wysokiego stopnia zaufania w aplikacji i niesie ze sobą ryzyko, które nie występują w innych przepływach. Użyj tego przepływu tylko wtedy, gdy bardziej bezpieczne opcje, takie jak tożsamości zarządzane dla połączeń bez hasła lub bez kluczy, nie są opłacalne. W przypadku operacji maszyny lokalnej preferuj tożsamości użytkowników dla połączeń bez hasła lub bez klucza.
Domyślnie, jeśli nie ustawiono żadnych konfiguracji, konfiguracje rozpoczynające się od /application/
są ładowane z domyślną etykietą, chyba że ustawiono profil (No Label)
Spring, w tym przypadku domyślna etykieta to Profil Spring. Ponieważ magazyn jest pusty, nie są ładowane żadne konfiguracje, ale źródło właściwości konfiguracji aplikacja systemu Azure jest nadal generowane.
Źródło właściwości o nazwie /application/https://<name-of-your-store>.azconfig.io/
jest tworzone zawierające właściwości tego magazynu. Etykieta używana w żądaniu jest dołączana na końcu nazwy. Jeśli etykieta nie jest ustawiona, znak \0
jest obecny jako puste miejsce.
Ładowanie konfiguracji
Biblioteka obsługuje ładowanie jednego lub wielu magazynów usługi App Configuration. W sytuacji, gdy klucz jest zduplikowany w wielu magazynach, ładowanie wszystkich magazynów powoduje załadowanie konfiguracji magazynów o najwyższym priorytcie. Ostatni wygrywa. Ten proces przedstawiono w poniższym przykładzie:
spring.cloud.azure.appconfiguration.stores[0].connection-string=[first-store-connection-string]
spring.cloud.azure.appconfiguration.stores[1].connection-string=[second-store-connection-string]
W tym przykładzie, jeśli zarówno pierwszy, jak i drugi magazyn mają taką samą konfigurację, konfiguracja w drugim magazynie ma najwyższy priorytet, a ostatni wygrywa.
Uwaga
Możesz użyć aplikacja systemu Azure ustawień konfiguracji, takich jak dowolna inna konfiguracja platformy Spring. Aby uzyskać więcej informacji, zobacz Podstawowe funkcje w dokumentacji środowiska Spring Boot lub Szybki start: tworzenie aplikacji Java Spring przy użyciu usługi aplikacja systemu Azure Configuration.
Wybieranie konfiguracji
Konfiguracje są ładowane przez ich klucz i etykietę. Domyślnie są ładowane konfiguracje rozpoczynające się od klucza /application/
. Domyślna etykieta to ${spring.profiles.active}
. Jeśli ${spring.profiles.active}
nie zostanie ustawiona, konfiguracje z etykietą null
zostaną załadowane. Etykieta null
jest wyświetlana w (No Label)
witrynie Azure Portal.
Konfiguracje ładowane można skonfigurować, wybierając różne filtry kluczy i etykiet, jak pokazano w poniższym przykładzie:
spring.cloud.azure.appconfiguration.stores[0].selects[0].key-filter=[my-key]
spring.cloud.azure.appconfiguration.stores[0].selects[0].label-filter=[my-label]
Właściwość key-filter
obsługuje następujące filtry:
Filtr klucza | Efekt |
---|---|
* |
Pasuje do dowolnego klucza. |
abc |
Pasuje do klucza o nazwie abc . |
abc* |
Pasuje do nazw kluczy rozpoczynających się od abc . |
abc,xyz |
Pasuje do nazw abc kluczy lub xyz . Ograniczone do pięciu wartości rozdzielonych przecinkami. |
Właściwość label-filter
obsługuje następujące filtry:
Etykieta | opis |
---|---|
* |
Pasuje do dowolnej etykiety, w tym \0 . |
\0 |
Dopasuj null etykiety, które są wyświetlane w (No Label) witrynie Azure Portal. |
1.0.0 |
Dopasuj etykietę 1.0.0 dokładnie. |
1.0.* |
Dopasuje etykiety rozpoczynające się od 1.0.* . |
,1.0.0 |
Dopasuj etykiety null i 1.0.0 . Ograniczone do pięciu wartości rozdzielonych przecinkami. |
Jeśli używasz kodu YAML z filtrami etykiet i musisz zacząć od null
, filtr etykiety musi być otoczony pojedynczymi cudzysłowami, jak pokazano w poniższym przykładzie:
spring:
cloud:
azure:
appconfiguration:
stores:
- selects:
- label-filter: ',1.0.0'
Uwaga
Nie można łączyć *
z filtrami ,
. W takim przypadku należy użyć dodatkowej wartości wyboru.
Profile spring
Domyślnie spring.profiles.active
jest ustawiana jako domyślna label-filter
dla wszystkich wybranych konfiguracji. Tę funkcję można zastąpić przy użyciu polecenia label-filter
. Profile spring można używać w programie label-filter
przy użyciu metody ${spring.profiles.active}
, jak pokazano w poniższym przykładzie:
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
W pierwszym label-filter
pliku wszystkie konfiguracje z etykietą null
są ładowane, a następnie wszystkie konfiguracje pasujące do profilów spring. Profile spring mają priorytet null
nad konfiguracjami, ponieważ są one na końcu.
W drugim label-filter
ciągu ciąg _local
jest dołączany na końcu profilów Spring, ale tylko do ostatniego profilu Spring.
Wyłączone magazyny
Za pomocą konfiguracji spring.cloud.azure.appconfiguration.enabled
można wyłączyć ładowanie dla wszystkich magazynów konfiguracji. spring.cloud.azure.appconfiguration.stores[0].enabled
Dzięki konfiguracji można wyłączyć pojedynczy magazyn.
Oprócz wyłączania magazynów można skonfigurować magazyny do wyłączenia, jeśli nie zostaną załadowane. W przypadku tej konfiguracji użyj polecenia spring.cloud.azure.appconfiguration.stores[0].fail-fast
. Gdy fail-fast
jest wyłączona przez ustawienie go na false
wartość , RuntimeException
powoduje wyłączenie magazynu aplikacji bez ładowanych konfiguracji. Jeśli magazyn konfiguracji jest wyłączony podczas uruchamiania, nie jest sprawdzany pod kątem zmian po odświeżeniu. Ponadto nie ma próby załadowania wartości z niej, jeśli konfiguracje zostaną zaktualizowane.
Jeśli podczas sprawdzania odświeżania lub podczas próby ponownego załadowania konfiguracji wystąpi błąd RuntimeException
, próba odświeżenia zakończy się i zostanie ponowiona po zakończeniu refresh-interval
próby.
Uwierzytelnianie
Biblioteka obsługuje wszystkie formy tożsamości obsługiwane przez bibliotekę tożsamości platformy Azure. Uwierzytelnianie można wykonać za pomocą konfiguracji dla parametry połączenia i tożsamości zarządzanej.
Uwaga
Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Przepływ uwierzytelniania opisany w tej procedurze, taki jak bazy danych, pamięci podręczne, komunikaty lub usługi sztucznej inteligencji, wymaga bardzo wysokiego stopnia zaufania w aplikacji i niesie ze sobą ryzyko, które nie występują w innych przepływach. Użyj tego przepływu tylko wtedy, gdy bardziej bezpieczne opcje, takie jak tożsamości zarządzane dla połączeń bez hasła lub bez kluczy, nie są opłacalne. W przypadku operacji maszyny lokalnej preferuj tożsamości użytkowników dla połączeń bez hasła lub bez klucza.
Connection string
Uwierzytelnianie za pomocą parametry połączenia jest najprostszą formą konfiguracji. Dostęp do parametry połączenia sklepu można uzyskać przy użyciu następującego polecenia:
az appconfig credential list --name <name-of-your-store>
Następnie można ustawić spring.cloud.azure.appconfiguration.stores[0].connection-string
właściwość na parametry połączenia. Zdecydowanie zalecamy ustawienie parametry połączenia w lokalnym pliku konfiguracji na wartość symbolu zastępczego mapowania na zmienną środowiskową. Takie podejście pozwala uniknąć dodawania parametry połączenia do kontroli źródła.
Konfiguracja platformy Azure spring Cloud
Konfigurację platformy Azure platformy Spring Cloud można użyć do skonfigurowania biblioteki. Aby skonfigurować bibliotekę, możesz użyć następujących właściwości:
spring.cloud.azure.appconfiguration.stores[0].endpoint= <URI-of-your-configuration-store>
Po ustawieniu tylko punktu końcowego biblioteka klienta używa wartości DefaultAzureCredential do uwierzytelniania. Metoda DefaultAzureCredential
używa następujących metod do uwierzytelniania:
- Poświadczenia środowiska
- Poświadczenia tożsamości zarządzanej
- Poświadczenia interfejsu wiersza polecenia dla deweloperów platformy Azure
- Poświadczenia intelliJ
- Poświadczenia interfejsu wiersza polecenia platformy Azure
- Poświadczenia programu Azure PowerShell
Aby odczytywać konfiguracje, musisz przypisać tożsamość, taką jak tożsamość przypisana przez system. To przypisanie można utworzyć przy użyciu następującego polecenia:
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>
Uwaga
Można zdefiniować tylko jedną metodę uwierzytelniania na punkt końcowy: parametry połączenia, tożsamość przypisana przez użytkownika lub poświadczenia tokenu. Jeśli musisz mieszać i dopasowywać, możesz użyć ConfigurationClientCustomizer
metody do modyfikowania magazynów, które używają innej metody.
Uwaga
Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Przepływ uwierzytelniania opisany w tej procedurze, taki jak bazy danych, pamięci podręczne, komunikaty lub usługi sztucznej inteligencji, wymaga bardzo wysokiego stopnia zaufania w aplikacji i niesie ze sobą ryzyko, które nie występują w innych przepływach. Użyj tego przepływu tylko wtedy, gdy bardziej bezpieczne opcje, takie jak tożsamości zarządzane dla połączeń bez hasła lub bez kluczy, nie są opłacalne. W przypadku operacji maszyny lokalnej preferuj tożsamości użytkowników dla połączeń bez hasła lub bez klucza.
Replikacja geograficzna
Biblioteka obsługuje funkcję replikacji geograficznej aplikacja systemu Azure Configuration. Ta funkcja umożliwia replikowanie danych do innych lokalizacji. Ta funkcja jest przydatna w przypadku wysokiej dostępności i odzyskiwania po awarii.
Każda utworzona replika ma dedykowany punkt końcowy. Jeśli aplikacja znajduje się w wielu geolokalizacji, możesz zaktualizować każde wdrożenie aplikacji w lokalizacji, aby połączyć się z repliką bliżej tej lokalizacji, co pomaga zminimalizować opóźnienie sieci między aplikacją a usługą App Configuration. Ponieważ każda replika ma swój oddzielny limit przydziału żądań, ta konfiguracja pomaga również w skalowalności aplikacji, gdy rośnie do usługi rozproszonej w wielu regionach.
Przejście w tryb failover może wystąpić, jeśli biblioteka obserwuje dowolny z następujących warunków:
- Odbiera odpowiedzi z niedostępnym kodem stanu usługi (HTTP 500 lub nowszym) z punktu końcowego.
- Występują problemy z łącznością sieciową.
- Żądania są ograniczane (kod stanu HTTP 429).
Tworzenie magazynu konfiguracji z replikacją geograficzną
Aby utworzyć replikę magazynu konfiguracji, możesz użyć interfejsu wiersza polecenia platformy Azure lub witryny Azure Portal. W poniższym przykładzie użyto interfejsu wiersza polecenia platformy Azure do utworzenia repliki w regionie Wschodnie stany USA 2:
az appconfig replica create --location --name --store-name [--resource-group]
Korzystanie z repliki magazynu konfiguracji
Po utworzeniu repliki możesz jej użyć w aplikacji. Podobnie jak magazyn pochodzenia, możesz nawiązać połączenie z repliką przy użyciu identyfikatora Microsoft Entra ID lub parametry połączenia.
Uwaga
Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Przepływ uwierzytelniania opisany w tej procedurze, taki jak bazy danych, pamięci podręczne, komunikaty lub usługi sztucznej inteligencji, wymaga bardzo wysokiego stopnia zaufania w aplikacji i niesie ze sobą ryzyko, które nie występują w innych przepływach. Użyj tego przepływu tylko wtedy, gdy bardziej bezpieczne opcje, takie jak tożsamości zarządzane dla połączeń bez hasła lub bez kluczy, nie są opłacalne. W przypadku operacji maszyny lokalnej preferuj tożsamości użytkowników dla połączeń bez hasła lub bez klucza.
Aby nawiązać połączenie z repliką przy użyciu identyfikatora Entra firmy Microsoft, musisz wyświetlić listę endpoints
wystąpień magazynu konfiguracji, jak pokazano w poniższym przykładzie:
spring.cloud.azure.appconfiguration.stores[0].endpoints[0]=[your primary store endpoint]
spring.cloud.azure.appconfiguration.stores[0].endpoints[1]=[your replica store endpoint]
Możesz wyświetlić dowolną liczbę punktów końcowych, ile masz replik. Biblioteka próbuje nawiązać połączenie z punktami końcowymi w kolejności, w której są wymienione. Jeśli biblioteka nie może nawiązać połączenia z repliką, podejmie próbę następnego z listy. Po upływie czasu biblioteka próbuje ponownie nawiązać połączenie z preferowanymi punktami końcowymi.
Wartości klucza
aplikacja systemu Azure Configuration obsługuje wiele typów wartości kluczy, z których niektóre mają wbudowane specjalne funkcje. aplikacja systemu Azure Configuration ma wbudowaną obsługę typu zawartości JSON, symboli zastępczych spring i odwołań usługi Key Vault.
Symbole zastępcze
Biblioteka obsługuje konfiguracje z symbolami ${}
zastępczymi środowiska stylu. W przypadku odwoływania się do klucza konfiguracji aplikacja systemu Azure z symbolem zastępczym usuń prefiksy z odwołania. Na przykład /application/config.message
jest przywołyny jako ${config.message}
.
Uwaga
Usuwany prefiks odpowiada wartości spring.cloud.azure.appconfiguration.stores[0].selects[0].key-filter
.
JSON
Konfiguracje, które mają typ application/json
zawartości, są przetwarzane jako obiekty JSON. Ta funkcja umożliwia mapowania jednej konfiguracji na złożony obiekt wewnątrz @ConfigurationProperties
obiektu . Rozważmy na przykład klucz /application/config.colors
JSON o następującej wartości:
{
"Red": {
"value": [255, 0, 0]
},
"Blue": {
"value": [0, 255, 0]
},
"Green": {
"value": [0, 0, 255]
}
}
Ten klucz mapuje na następujący kod:
@ConfigurationProperties(prefix = "config")
public class MyConfigurations {
private Map<String, Color> colors;
}
Odwołania do usługi Key Vault
aplikacja systemu Azure Configuration i jego biblioteki obsługują odwoływanie się do wpisów tajnych przechowywanych w usłudze Key Vault. W usłudze App Configuration można tworzyć klucze z wartościami mapowymi na wpisy tajne przechowywane w usłudze Key Vault. Wpisy tajne są bezpiecznie przechowywane w usłudze Key Vault, ale mogą być dostępne w taki sam sposób jak każda inna konfiguracja po załadowaniu.
Aplikacja używa dostawcy klienta do pobierania odwołań usługi Key Vault, podobnie jak w przypadku innych kluczy przechowywanych w usłudze App Configuration. Ponieważ klient rozpoznaje klucze jako odwołania do usługi Key Vault, ma unikatowy typ zawartości, a klient nawiązuje połączenie z usługą Key Vault w celu pobrania ich wartości.
Uwaga
Usługa Key Vault zezwala tylko na pobieranie wpisów tajnych pojedynczo, więc każde odwołanie do usługi Key Vault przechowywane w usłudze App Configuration powoduje ściąganie w usłudze Key Vault.
Tworzenie odwołań do usługi Key Vault
Odwołanie do usługi Key Vault można utworzyć w witrynie Azure Portal, przechodząc do eksploratora>konfiguracji Tworzenie>dokumentacji usługi Key Vault. Następnie możesz wybrać wpis tajny do odwołania z dowolnego magazynu kluczy, do którego masz dostęp. Możesz również utworzyć dowolne odwołania do usługi Key Vault na karcie Dane wejściowe . W witrynie Azure Portal wprowadź prawidłowy identyfikator URI.
Odwołanie do usługi Key Vault można również utworzyć za pomocą interfejsu wiersza polecenia platformy Azure przy użyciu następującego polecenia:
az appconfig kv set-keyvault \
--name <name-of-your-store> \
--key <key-name> \
--secret-identifier <URI-to-your-secret>
Dowolny identyfikator wpisu tajnego można utworzyć za pomocą interfejsu wiersza polecenia platformy Azure. Identyfikatory wpisów tajnych wymagają tylko formatu {vault}/{collection}/{name}/{version?}
, w którym sekcja wersji jest opcjonalna.
Korzystanie z odwołań usługi Key Vault
Konfigurację platformy Azure platformy Spring Cloud można użyć do skonfigurowania biblioteki. Możesz użyć tego samego poświadczenia użytego do nawiązania połączenia z usługą App Configuration w celu nawiązania połączenia z usługą Azure Key Vault.
Rozwiązywanie problemów z wpisami tajnymi usługi Key Vault
Biblioteka App Configuration udostępnia metodę lokalnego rozpoznawania wpisów tajnych, które nie mają skojarzonego z nimi magazynu kluczy. To rozwiązanie odbywa się za pośrednictwem .KeyVaultSecretProvider
Element KeyVaultSecretProvider
jest wywoływany, gdy element TokenCredential
nie jest podany dla odwołania do usługi Key Vault. Podany jest identyfikator URI odwołania do usługi Key Vault, a zwracana wartość staje się wartością wpisu tajnego.
Ostrzeżenie
Użycie KeyVaultSecretProvider
zastępowania automatycznego używania tożsamości zarządzanej przypisanej przez system. Aby użyć obu tych elementów, należy użyć KeyVaultCredentialProvider
identyfikatorów URI, które wymagają rozwiązania, i zwrócić null
je.
public class MySecretProvider implements KeyVaultSecretProvider {
@Override
public String getSecret(String uri) {
...
}
}
Zarządzanie funkcjami
Zarządzanie funkcjami umożliwia aplikacjom Spring Boot dynamiczne uzyskiwanie dostępu do zawartości. Zarządzanie funkcjami ma różne funkcje, takie jak następujące:
- Flagi funkcji, które mogą włączać lub wyłączać zawartość
- Filtry funkcji określania wartości docelowej w przypadku wyświetlania zawartości
- Filtry dostosowanych funkcji
- Bramy funkcji umożliwiające dynamiczne włączanie punktów końcowych
Flagi funkcji można włączyć za pomocą następującej konfiguracji:
spring.cloud.azure.appconfiguration.stores[0].feature-flags.enabled= true
Włączone flagi funkcji są ładowane do systemu konfiguracji Spring z prefiksem feature-management
. Możesz również zarejestrować flagi funkcji w lokalnym pliku konfiguracji. Aby uzyskać więcej informacji, zobacz sekcję Deklaracja flagi funkcji.
Najprostszym sposobem korzystania z zarządzania funkcjami jest użycie spring-cloud-azure-feature-management
bibliotek i spring-cloud-azure-feature-management-web
. Różnica między dwiema bibliotekami polega na tym, że spring-cloud-azure-feature-management-web
zależność od spring-web
bibliotek i spring-webmvc
wymaga dodania większej liczby funkcji, takich jak bramy funkcji.
Flagi funkcji można włączyć przy użyciu filtrów/etykiet. Domyślnie jest przypisywana etykieta null
widoczna jako (No Label)
, . Flagi funkcji ładowane można skonfigurować, ustawiając filtr etykiety, jak pokazano w poniższym przykładzie:
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
Podstawowe informacje dotyczące zarządzania funkcjami
Flagi funkcji
Flagi funkcji składają się z dwóch części: nazwy i listy filtrów funkcji, które są używane do włączania funkcji. Flagi funkcji mogą mieć stan logiczny włączone/wyłączone lub mogą mieć listę filtrów funkcji. Flagi funkcji oceniają filtry funkcji do momentu, gdy jeden z nich zwróci true
wartość . Jeśli żaden filtr funkcji nie zwraca true
wartości , flaga funkcji zwraca wartość false
.
Filtry funkcji
Filtry funkcji definiują scenariusz włączania funkcji. Filtry funkcji są oceniane synchronicznie.
Biblioteka zarządzania funkcjami zawiera cztery wstępnie zdefiniowane filtry: AlwaysOnFilter, PercentageFilter, TimeWindowFilter i TargetingFilter.
Możesz tworzyć filtry funkcji niestandardowych. Na przykład możesz użyć filtru funkcji, aby zapewnić niestandardowe środowisko dla klientów korzystających z przeglądarki Microsoft Edge. Możesz dostosować funkcje w tym filtrze funkcji, na przykład, aby wyświetlić określony nagłówek dla odbiorców przeglądarki Microsoft Edge.
Deklaracja flagi funkcji
Biblioteka zarządzania funkcjami obsługuje konfigurację aplikacja systemu Azure wraz z application.yml lub bootstrap.yml jako źródła flag funkcji. Oto przykład formatu używanego do konfigurowania flag funkcji w pliku application.yml :
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
Ten przykład zawiera następujące flagi funkcji:
feature-t
jest ustawiona nafalse
wartość . To ustawienie zawsze zwraca wartość flagi funkcji.feature-u
jest używany z filtrami funkcji. Te filtry są definiowane w ramachenabled-for
właściwości . W takim przypadkufeature-u
ma jeden filtr funkcji o nazwieRandom
, który nie wymaga żadnej konfiguracji, więc wymagana jest tylko właściwość name.feature-v
określa filtr funkcji o nazwieTimeWindowFilter
. Ten filtr funkcji można przekazać do użycia jako konfigurację. W tym przykładzie parametrTimeWindowFilter
przechodzi w godzinach rozpoczęcia i zakończenia, w których funkcja jest aktywna.feature-w
jest używany dla elementuAlwaysOnFilter
, który zawsze daje wartośćtrue
. Poleevaluate
służy do zatrzymywania oceny filtrów funkcji i powoduje, że filtr funkcji zawsze zwraca wartośćfalse
.
Ocenianie flag funkcji
Biblioteka spring-cloud-azure-feature-management
udostępnia FeatureManager
informacje umożliwiające określenie, czy flaga funkcji jest włączona. FeatureManager
Zapewnia asynchroniczny sposób sprawdzania stanu flagi.
spring-cloud-azure-feature-management-web
, wraz z dostarczaniem FeatureManager
elementu , zawiera FeatureManagerSnapshot
element , który buforuje stan wcześniej ocenianych flag funkcji w obiekcie , @RequestScope
aby zagwarantować, że wszystkie żądania zwracają tę samą wartość. Ponadto biblioteka internetowa udostępnia @FeatureGate
element , który może blokować lub przekierowywać żądania internetowe do różnych punktów końcowych.
Sprawdzanie flagi funkcji
FeatureManager
jest elementem @Bean
, który może być @Autowired
lub wstrzykiwany do @Component
obiektów typu. FeatureManager
ma metodę isEnabled
, która po przekazaniu nazwy flagi funkcji zwraca jej stan.
@Autowired
FeatureManager featureManager;
if (featureManager.isEnabled("feature-t")) {
// Do Something
}
Uwaga
FeatureManger
ma również asynchroniczną wersję isEnabled
o nazwie isEnabledAsync
.
Jeśli nie skonfigurowano zarządzania funkcjami lub flaga funkcji nie istnieje, isEnabled
zawsze zwraca wartość false
. Jeśli istniejąca flaga funkcji jest skonfigurowana z nieznanym filtrem funkcji, FilterNotFoundException
zostanie zgłoszony element . To zachowanie można zmienić, aby powrócićfalse
, konfigurując fail-fast
wartość .false
W poniższej tabeli opisano fail-fast
:
Nazwa/nazwisko | opis | Wymagani | Wartość domyślna |
---|---|---|---|
spring.cloud.azure.feature.management.fail-fast |
W przypadku wystąpienia wyjątku zgłaszany jest wyjątek RuntimeException . Jeśli ta właściwość jest ustawiona na false wartość , isEnabled zwraca zamiast tego wartość false . |
Nie. | true |
Jedyną różnicą między elementami FeatureManagerSnapshot
i FeatureManager
jest buforowanie wyników w obiekcie @RequestScope
.
Bramka funkcji
Za pomocą biblioteki sieci Web zarządzania funkcjami można wymagać włączenia danej funkcji w celu wykonania punktu końcowego. To wymaganie można skonfigurować przy użyciu @FeatureGate
adnotacji, jak pokazano w poniższym przykładzie:
@GetMapping("/featureT")
@FeatureGate(feature = "feature-t")
@ResponseBody
public String featureT() {
...
}
Dostęp do punktu końcowego featureT
można uzyskać tylko wtedy, gdy opcja "feature-t" jest włączona.
Wyłączona obsługa akcji
Gdy punkt końcowy jest zablokowany, ponieważ określona funkcja jest wyłączona, DisabledFeaturesHandler
jest wywoływana. Domyślnie zwracany jest błąd HTTP 404. To zachowanie można zastąpić, implementując DisabledFeaturesHandler
metodę , jak pokazano w poniższym przykładzie:
@Component
public class MyDisabledFeaturesHandler implements DisabledFeaturesHandler {
@Override
public HttpServletResponse handleDisabledFeatures(HttpServletRequest request, HttpServletResponse response) {
...
return response;
}
}
Routing
Niektóre trasy mogą uwidaczniać możliwości aplikacji, które są bramowane przez funkcje. Jeśli funkcja jest wyłączona, możesz przekierować te trasy do innego punktu końcowego, jak pokazano w poniższym przykładzie:
@GetMapping("/featureT")
@FeatureGate(feature = "feature-t" fallback= "/oldEndpoint")
@ResponseBody
public String featureT() {
...
}
@GetMapping("/oldEndpoint")
@ResponseBody
public String oldEndpoint() {
...
}
Filtry funkcji wbudowanych
Istnieje kilka filtrów funkcji, które są dostarczane z pakietem spring-cloud-azure-feature-management
. Te filtry funkcji nie są dodawane automatycznie, ale można je skonfigurować w obiekcie @Configuration
.
AlwaysOnFilter
Ten filtr zawsze zwraca wartość true
. Aby zapoznać się z przykładem użycia, zobacz sekcję deklaracji flagi funkcji.
Filtr procentowy
Za każdym razem, gdy użytkownik wysyła żądanie, ocena PercentageFilter
może zwrócić inny wynik. Tę niespójność można obejść przy użyciu FeatureManagementSnapshot
elementu , który buforuje wynik flagi funkcji dla użytkownika. Ta funkcja gwarantuje, że użytkownik ma spójne środowisko, nawet jeśli będzie musiał ponownie wysłać żądanie.
feature-management:
feature-v:
enabled-for:
- name: PercentageFilter
parameters:
Value: 50
TimeWindowFilter
Ten filtr zapewnia możliwość włączenia funkcji na podstawie przedziału czasu. Jeśli określisz tylko End
wartość , funkcja jest uwzględniana do tej pory. Jeśli określisz tylko Start
wartość , funkcja jest uwzględniana we wszystkich punktach po tym czasie. Jeśli określisz oba te elementy, funkcja jest uznawana za prawidłową między dwoma razy.
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"
TargetFilter
Ten filtr zapewnia możliwość włączenia funkcji dla odbiorców docelowych. Aby uzyskać szczegółowe wyjaśnienie określania wartości docelowej, zobacz sekcję określania wartości docelowej. Parametry filtru obejmują obiekt odbiorców, który opisuje użytkowników, grupy i domyślny procent bazy użytkowników, który powinien mieć dostęp do funkcji. Dla każdego obiektu grupy, który jest wymieniony w docelowej grupie odbiorców, wymagany jest procent, który definiuje procent członków tej grupy, którzy mają dostęp do funkcji. Użytkownik ma włączoną funkcję w następujących przypadkach:
- Użytkownik jest określony bezpośrednio w sekcji użytkowników.
- Użytkownik znajduje się w uwzględnionych procentach dowolnego wdrożenia grupy.
- Użytkownik należy do domyślnego procentu wdrożenia.
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
Filtry funkcji niestandardowych
Tworzenie niestandardowego filtru funkcji umożliwia włączanie funkcji na podstawie zdefiniowanych kryteriów. Aby utworzyć niestandardowy filtr funkcji, należy zaimplementować FeatureFilter
interfejs. FeatureFilter
ma jedną metodę evaluate
. Gdy funkcja określa, że można ją włączyć za pomocą filtru funkcji, wywoływana evaluate
jest metoda . Jeśli evaluate
funkcja zwraca true
wartość , oznacza to, że funkcja powinna być włączona. Jeśli zwraca false
wartość , kontynuuje ocenianie filtrów funkcji do momentu, gdy jeden zwróci true
wartość . Jeśli wszystkie filtry zwracają false
wartość , funkcja jest wyłączona.
Filtry funkcji są definiowane jako Spring Beans, dlatego są zdefiniowane jako @Component
lub zdefiniowane w elemecie @Configuration
.
@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;
}
}
Filtry funkcji sparametryzowanych
Niektóre filtry funkcji wymagają parametrów, aby określić, czy funkcja powinna być włączona. Na przykład filtr funkcji przeglądarki może włączyć funkcję dla określonego zestawu przeglądarek. Możesz chcieć włączyć funkcję dla przeglądarek Microsoft Edge i Chrome, ale nie Firefox. Aby skonfigurować tę sytuację, można zaprojektować filtr funkcji, aby oczekiwać parametrów. Te parametry zostaną określone w konfiguracji funkcji i w kodzie i będą dostępne za pośrednictwem parametru FeatureFilterEvaluationContext
evaluate
. FeatureFilterEvaluationContext
ma właściwość parameters
, która jest .HashMap<String, Object>
Określanie celu
Określanie wartości docelowej to strategia zarządzania funkcjami, która umożliwia deweloperom stopniowe wdrażanie nowych funkcji w bazie użytkowników. Strategia jest oparta na koncepcji określania celu grupy użytkowników znanej jako docelowa grupa odbiorców. Odbiorcy składają się z określonych użytkowników, grup i wyznaczonego procentu całej bazy użytkowników. Grupy, które są uwzględnione w grupie odbiorców, można podzielić dalej na wartości procentowe ich całkowitej liczby członków.
W poniższych krokach przedstawiono przykład progresywnego wdrożenia nowej funkcji "Beta":
- Indywidualni użytkownicy Jeff i Alicia otrzymują dostęp do wersji beta.
- Inny użytkownik, Mark, prosi o wyrażenie zgody i jest uwzględniony.
- Dwadzieścia procent grupy znanej jako "Ring1" użytkowników jest uwzględnionych w wersji beta.
- Liczba użytkowników "Ring1" uwzględnionych w wersji beta wzrosła do 100 procent.
- Pięć procent bazy użytkowników jest uwzględnionych w wersji beta.
- Procent wdrożenia jest wyprzedzony do 100 procent, a funkcja jest całkowicie wdrażana.
Ta strategia wdrażania funkcji jest wbudowana w bibliotekę za pomocą dołączonego TargetingFilter
filtru funkcji.
Określanie wartości docelowej w aplikacji
Przykładowa aplikacja internetowa korzystająca z filtru funkcji określania wartości docelowej jest dostępna w przykładowym projekcie.
Aby rozpocząć korzystanie z TargetingFilter
elementu w aplikacji, należy dodać go jako podobny do @Bean
dowolnego innego filtru funkcji. TargetingFilter
program korzysta z innego @Bean
elementu, który ma zostać dodany do aplikacji TargetingContextAccessor
. Umożliwia TargetingContextAccessor
zdefiniowanie bieżącego TargetingContext
elementu do definiowania bieżącego identyfikatora użytkownika i grup, jak pokazano w poniższym przykładzie:
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);
}
}
Opcje oceny określania wartości docelowej
Dostępne są opcje dostosowywania sposobu określania wartości docelowej w danym TargetingFilter
obiekcie . Podczas tworzenia można ustawić opcjonalny parametr , TargetingEvaluationOptions
TargetingFilter
.
@Bean
public TargetingFilter targetingFilter(MyTargetingContextAccessor contextAccessor) {
return new TargetingFilter(contextAccessor, new TargetingEvaluationOptions().setIgnoreCase(true));
}
Odświeżanie konfiguracji
Włączenie odświeżania konfiguracji dla konfiguracji umożliwia ściąganie najnowszych wartości ze sklepu App Configuration store lub sklepów bez konieczności ponownego uruchamiania aplikacji.
Aby włączyć odświeżanie, należy włączyć monitorowanie wraz z wyzwalaczami monitorowania. Wyzwalacz monitorowania to klucz z opcjonalną etykietą, która jest sprawdzana pod kątem zmian wartości w celu wyzwolenia aktualizacji. Wartość wyzwalacza monitorowania może być dowolną wartością, o ile zmienia się, gdy jest potrzebne odświeżanie.
Uwaga
Każda operacja, która zmienia element ETag wyzwalacza monitorowania, powoduje odświeżenie, takie jak zmiana typu zawartości.
spring:
cloud:
azure:
appconfiguration:
stores:
- monitoring:
enabled: true
triggers:
- key: [my-watched-key]
label: [my-watched-label]
Aby wyzwolić odświeżanie konfiguracji, zmień wartość klucza w magazynie konfiguracji. Następnie zaktualizuj jeden z kluczy zegarka do nowej wartości. Ta zmiana wyzwala tworzenie dziennika. Na przykład zmiana wartości wyzwalaczy następującego komunikatu /application/config.message
dziennika:
INFO 17496 --- [TaskScheduler-1] o.s.c.e.event.RefreshEventListener : Refresh keys changed: [config.message]
Po wygenerowaniu dziennika aplikacja odświeża wszystkie @Bean
elementy w zakresie odświeżania.
Uwaga
Domyślnie @ConfigurationProperties
w tym zakresie znajdują się adnotacje fasoli.
Odświeżanie oparte na ściąganiu
Biblioteki Spring konfiguracji aplikacji obsługują możliwość okresowego sprawdzania interwału odświeżania pod kątem zmian wprowadzonych w wyzwalaczach monitorowania. Domyślnie interwał odświeżania jest ustawiony na 30 sekund. Po upływie interwału odświeżania wszystkie wyzwalacze są zaewidencjonowane w danym magazynie pod kątem zmian. Każda zmiana klucza powoduje wyzwolenie odświeżania. Ponieważ biblioteki integrują się z systemem odświeżania Spring, wszystkie odświeżenia ponownie ładują wszystkie konfiguracje ze wszystkich magazynów. Interwał odświeżania można ustawić na dowolny interwał dłuższy niż 1 sekundę. Obsługiwane jednostki interwału odświeżania to s
odpowiednio , , m
h
, i d
w sekundach, minutach, godzinach i dniach. Poniższy przykład ustawia interwał odświeżania na 5 minut:
spring.cloud.azure.appconfiguration.stores[0].monitoring.refresh-interval= 5m
Zautomatyzowane
Gdy używasz spring-cloud-azure-appconfiguration-config-web
biblioteki, aplikacja automatycznie sprawdza odświeżanie za każdym razem, gdy wystąpi żądanie serwletu, w szczególności ServletRequestHandledEvent
. Najczęstszym sposobem wysyłania tego zdarzenia są żądania do punktów końcowych w obiekcie @RestController
.
Ręcznie
W aplikacjach korzystających tylko spring-cloud-azure-appconfiguration-config
z programu , takich jak aplikacje konsolowe, można ręcznie wyzwolić odświeżanie, wywołując AppConfigurationRefresh
metodę "s refreshConfiguration
". AppConfigurationRefresh
@Bean
to element, który można wstrzyknąć do dowolnego @Component
.
Ponadto, ponieważ biblioteka korzysta z systemu konfiguracji platformy Spring, wyzwalanie odświeżania powoduje odświeżenie wszystkich konfiguracji, a nie tylko ponowne ładowanie tych z magazynu konfiguracji aplikacja systemu Azure.
Odświeżanie oparte na wypychanie
Możesz skonfigurować bibliotekę spring-cloud-azure-appconfiguration-config-web
do odbierania powiadomień wypychanych z magazynu konfiguracji aplikacja systemu Azure w celu odświeżenia wartości konfiguracji. Tę konfigurację można skonfigurować za pomocą elementu Web Hook usługi Azure Event Grid, który można skonfigurować do wysyłania powiadomień o zmianach do określonych kluczy. Dodając bibliotekę siłownika spring jako zależność, można uwidocznić punkty końcowe odświeżania usługi App Configuration. Istnieją dwa różne punkty końcowe: appconfiguration-refresh
i appconfiguration-refresh-bus
. Te punkty końcowe działają podobnie do ich odpowiedników refresh
i refresh-bus
, gdzie punkty końcowe konfiguracji aplikacji wygasają interwał odświeżania zamiast wymuszać odświeżanie po otrzymaniu. Nadal można używać elementów refresh
i refresh-bus
, ale nie można połączyć ich bezpośrednio z usługą Azure Event Grid przy użyciu elementu Web Hook, ponieważ wymagają one odpowiedzi w konfiguracji.
Właściwość appconfiguration-refresh
wygasa interwał odświeżania, więc pozostały interwał odświeżania nie jest czekany przed następnym sprawdzeniem odświeżania. Właściwość appconfiguration-refresh-bus
wysyła powiadomienie do połączonej usługi obsługi komunikatów, takiej jak Azure Service Bus, w celu powiadomienia wszystkich wystąpień aplikacji o odświeżeniu. W obu przypadkach nie wygasa ona całkowicie w interwale odświeżania, ale jest wyłączona przez niewielką ilość roztrzasku. To zakłócenia zapewnia, że każde wystąpienie aplikacji nie próbuje odświeżyć w tym samym czasie.
management.endpoints.web.exposure.include= appconfiguration-refresh, appconfiguration-refresh-bus
Oprócz uwidaczniania punktów końcowych odświeżania do zabezpieczeń dodano wymagany parametr zapytania. Domyślnie nie ustawiono nazwy ani wartości tokenu, ale ustawienie jednej z nich jest wymagane w celu użycia punktów końcowych, jak pokazano w poniższym przykładzie:
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]
Konfigurowanie punktów zaczepienia sieci Web
Aby skonfigurować element webhook, otwórz magazyn konfiguracji aplikacja systemu Azure i otwórz pozycję Zdarzenia z menu nawigacji. Następnie wybierz pozycję Subskrypcja zdarzeń. Ustaw nazwę zdarzenia i wybierz typ punktu końcowego jako Web Hook. Wybranie elementu Web Hook powoduje wyświetlenie opcji Punkt końcowy . Wybierz pozycję Wybierz punkt końcowy. Punkt końcowy powinien wyglądać podobnie do następującego przykładu: https://www.myaplication.com/actuator/appconfiguration-refresh?myTokenName=mySecret
.
Potwierdź, że wybór wysyła powiadomienie instalatora do danego identyfikatora URI i oczekuje odpowiedzi. Jeśli nie zostanie zwrócona żadna odpowiedź, instalacja zakończy się niepowodzeniem. Konfiguracja azure-spring-cloud-appconfiguration-web
biblioteki dla punktów końcowych zwraca poprawną odpowiedź, jeśli magazyn konfiguracji aplikacja systemu Azure jest skonfigurowany dla aplikacji. To potwierdzenie można wysłać na inne sposoby. Aby uzyskać więcej informacji na temat dostarczania elementu webhook, zobacz Webhook event delivery (Dostarczanie zdarzeń elementu webhook).
Uwaga
Ta walidacja odbywa się tylko po utworzeniu lub modyfikacji punktu końcowego.
Zdecydowanie zalecamy skonfigurowanie filtrów, ponieważ w przeciwnym razie odświeżanie jest wyzwalane po każdym utworzeniu i modyfikacji klucza.
Wymuszone odświeżanie klienta
Możesz skonfigurować bibliotekę tak, aby wymusić odświeżenie wszystkich konfiguracji w interwale odświeżania. W poniższej refresh-interval
tabeli opisano właściwość:
Nazwa/nazwisko | opis | Wymagani | Wartość domyślna |
---|---|---|---|
spring.cloud.azure.appconfiguration.refresh-interval |
Standardowy czas między odświeżeniami. Jest .Duration |
Nie. | null |
Odświeżanie za pomocą spring.cloud.azure.appconfiguration.refresh-interval
polecenia nie sprawdza żadnych skonfigurowanych kluczy zegarka. Ta właściwość służy do zapewnienia aktualności wpisów tajnych usługi Key Vault, ponieważ usługa aplikacja systemu Azure Configuration nie może określić, kiedy są aktualizowane.
Ponieważ usługa Azure Key Vault przechowuje parę kluczy publicznych i prywatnych certyfikatu jako wpisu tajnego, aplikacja może pobrać dowolny certyfikat jako odwołanie do usługi Key Vault w usłudze App Configuration. Ponieważ certyfikaty muszą być okresowo obracane, aplikacje klienckie muszą być aktualizowane tak samo często, co można zrobić za pomocą interwału odświeżania klienta.
Odświeżanie flagi funkcji
Jeśli flagi funkcji i monitorowanie są włączone, domyślnie interwał odświeżania flag funkcji jest ustawiony na 30 sekund. Po upływie interwału odświeżania wszystkie flagi funkcji są sprawdzane w danym magazynie pod kątem zmian. Każda zmiana klucza powoduje wyzwolenie odświeżania. Ponieważ biblioteki integrują się z systemem odświeżania Spring, wszystkie odświeżenia ponownie ładują wszystkie konfiguracje ze wszystkich magazynów. Interwał odświeżania można ustawić na dowolny interwał dłuższy niż 1 sekundę. Obsługiwane jednostki interwału odświeżania to s
odpowiednio , , m
h
, i d
w sekundach, minutach, godzinach i dniach. Poniższy przykład ustawia interwał odświeżania na 5 minut:
spring.cloud.azure.appconfiguration.stores[0].monitoring.feature-flag-refresh-interval= 5m
Wskaźnik kondycji
Biblioteka klienta zawiera wskaźnik kondycji, który sprawdza, czy połączenie z magazynem konfiguracji aplikacja systemu Azure jest w dobrej kondycji. Jeśli jest włączona dla każdego magazynu, daje jedną z następujących wartości stanu:
- UP — ostatnie połączenie zakończyło się pomyślnie.
- DOWN — ostatnie połączenie spowodowało kod błędu innego niż 200. Ten stan może być spowodowany problemami od poświadczeń wygasających do problemu z usługą. Biblioteka klienta automatycznie ponawia próbę nawiązania połączenia z magazynem w następnym interwale odświeżania.
- NIE ZAŁADOWANO — magazyn konfiguracji jest wymieniony w lokalnym pliku konfiguracji, ale magazyn konfiguracji nie został załadowany z pliku podczas uruchamiania. Magazyn konfiguracji jest wyłączony w pliku konfiguracji lub konfiguracja lub konfiguracje nie można załadować podczas uruchamiania, podczas gdy
fail-fast
konfiguracja magazynu została ustawiona nafalse
.
Wskaźnik kondycji można włączyć, ustawiając wartość management.health.azure-app-configuration.enabled=true
.
Dostosowywanie klienta
Biblioteka App Configuration używa zestawu Azure SDK dla języka Java do nawiązywania połączenia z usługą aplikacja systemu Azure Configuration i Azure Key Vault. Dwa interfejsy ConfigurationClientCustomizer
i SecretClientCustomizer
, są udostępniane do modyfikowania klientów. Każdy interfejs ma metodę customize
, która przyjmuje odpowiedniego konstruktora wraz z wartością String
identyfikatora URI, dla którego jest konfigurowany klient, jak pokazano w następujących definicjach interfejsu:
public interface ConfigurationClientCustomizer {
public void setup(ConfigurationClientBuilder builder, String endpoint);
}
public interface SecretClientCustomizer {
public void setup(SecretClientBuilder builder, String endpoint);
}
Te interfejsy umożliwiają dostosowanie klienta HTTP i jego konfiguracji. Poniższy przykład zastępuje wartość domyślną HttpClient
inną, która używa serwera proxy dla całego ruchu kierowanego do usługi App Configuration i Key Vault.
Uwaga
Wartości ConfigurationClientBuilder
i SecretClientBuilder
są już skonfigurowane do użycia w przypadku przekazania do elementu customize
. Wszelkie zmiany klientów, w tym poświadczenia i zasady ponawiania prób, zastępują te, które już istnieją.
Tę konfigurację można również wykonać przy użyciu konfiguracji platformy Azure Spring Cloud.
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();
}
}