Kurz: Použití dynamické konfigurace pomocí nabízené aktualizace v aplikaci .NET Core
Klientská App Configuration .NET Core podporuje aktualizaci konfigurace na vyžádání, aniž by to způsobilo restartování aplikace. Aplikaci je možné nakonfigurovat tak, aby detekovat App Configuration pomocí jednoho nebo obou následujících dvou přístupů.
Poll Model (Model dotazování): Toto je výchozí chování, které využívá dotazování ke zjištění změn v konfiguraci. Jakmile vyprší platnost hodnoty nastavení uložené v mezipaměti, další volání nebo odeslání požadavku na server ke kontrole, jestli se konfigurace změnila, a v případě potřeby si vyžádá aktualizovanou
TryRefreshAsyncRefreshAsynckonfiguraci.Model nabízených oznámení: App Configuration události k detekci změn v konfiguraci. Jakmile App Configuration nastavení pro odesílání událostí změny hodnoty klíče do služby Azure Event Grid, může aplikace tyto události použít k optimalizaci celkového počtu požadavků potřebných k aktualizaci konfigurace. Aplikace se mohou přihlásit k jejich odběru buď přímo z Event Grid, nebo prostřednictvím jedné z podporovaných obslužných rutin událostí, jako je webhook, funkce Azure nebo Service Bus téma.
Aplikace se mohou přihlásit k odběru těchto událostí buď přímo Event Grid, prostřednictvím webhooku nebo předáváním událostí do Azure Service Bus. Sada Azure Service Bus SDK poskytuje rozhraní API pro registraci obslužné rutiny zpráv, která tento proces zjednodušuje pro aplikace, které buď nemají koncový bod HTTP, nebo se chystá průběžné dotazování event gridu na změny.
Tento kurz ukazuje, jak můžete implementovat dynamické aktualizace konfigurace v kódu pomocí nabízené aktualizace. Vychází z aplikace představené v rychlých startech. Než budete pokračovat, dokončete nejprve vytvoření aplikace .NET Core App Configuration.
Kroky v tomto kurzu můžete provést v libovolném editoru kódu. Visual Studio Code je skvělá možnost, která je k dispozici na platformách Windows, macOS a Linux.
V tomto kurzu se naučíte:
- Nastavení odběru pro odesílání událostí změny konfigurace z App Configuration do Service Bus tématu
- Nastavte aplikaci .NET Core tak, aby v reakci na změny v systému App Configuration.
- Využít nejnovější konfiguraci v aplikaci
Požadavky
Pokud chcete tento kurz provést, nainstalujte .NET Core SDK.
Pokud ještě nemáte předplatné Azure,vytvořte si bezplatný účet před tím, než začnete.
Nastavení tématu a Service Bus Azure
Tento kurz používá integraci Service Bus pro Event Grid ke zjednodušení detekce změn konfigurace pro aplikace, které se App Configuration nepřetržitě dotazovat na změny. Sada Azure Service Bus SDK poskytuje rozhraní API pro registraci obslužné rutiny zpráv, kterou je možné použít k aktualizaci konfigurace při zjištění změn v App Configuration. Postupujte podle kroků v rychlém startu: Pomocí Azure Portal vytvořte Service Bus tématu a odběru služby Service Bus a vytvořte obor názvů, téma a odběr služby Service Bus.
Po vytvoření prostředků přidejte následující proměnné prostředí. Ty se budou používat k registraci obslužné rutiny události pro změny konfigurace v kódu aplikace.
| Klíč | Hodnota |
|---|---|
| ServiceBusConnectionString | Připojovací řetězec pro obor názvů služby Service Bus |
| ServiceBusTopic | Název Service Bus tématu |
| Odběr služby ServiceBusSubscription | Název předplatného služby Service Bus |
Nastavení odběru událostí
Otevřete prostředek App Configuration v Azure Portal a potom v
+ Event Subscriptionpodokně klikněteEventsna .
Zadejte název pro a
Event SubscriptionSystem Topic.
Jako vyberte
Endpoint Type, vyberte Service Bus a pak klikněte naService Bus TopicConfirm Selection.
Kliknutím na
Createvytvořte odběr události.Kliknutím na
Event Subscriptionsv podokněEventsověřte, že se předplatné úspěšně vytvořilo.
Poznámka
Při přihlášení k odběru změn konfigurace je možné použít jeden nebo více filtrů ke snížení počtu událostí odesílaných do vaší aplikace. Můžete je nakonfigurovat jako filtry Event Grid předplatného nebo jako Service Bus předplatného. Například filtr předplatného lze použít k přihlášení k odběru událostí pouze pro změny v klíči, který začíná konkrétním řetězcem.
Registrace obslužné rutiny události pro opětovné načtení dat z App Configuration
Otevřete soubor Program.cs a aktualizujte soubor následujícím kódem.
using Microsoft.Azure.ServiceBus;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.AzureAppConfiguration;
using System;
using System.Diagnostics;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace TestConsole
{
class Program
{
private const string AppConfigurationConnectionStringEnvVarName = "AppConfigurationConnectionString"; // e.g. Endpoint=https://{store_name}.azconfig.io;Id={id};Secret={secret}
private const string ServiceBusConnectionStringEnvVarName = "ServiceBusConnectionString"; // e.g. Endpoint=sb://{service_bus_name}.servicebus.windows.net/;SharedAccessKeyName={key_name};SharedAccessKey={key}
private const string ServiceBusTopicEnvVarName = "ServiceBusTopic";
private const string ServiceBusSubscriptionEnvVarName = "ServiceBusSubscription";
private static IConfigurationRefresher _refresher = null;
static async Task Main(string[] args)
{
string appConfigurationConnectionString = Environment.GetEnvironmentVariable(AppConfigurationConnectionStringEnvVarName);
IConfiguration configuration = new ConfigurationBuilder()
.AddAzureAppConfiguration(options =>
{
options.Connect(appConfigurationConnectionString);
options.ConfigureRefresh(refresh =>
refresh
.Register("TestApp:Settings:Message")
.SetCacheExpiration(TimeSpan.FromDays(30)) // Important: Reduce poll frequency
);
_refresher = options.GetRefresher();
}).Build();
RegisterRefreshEventHandler();
var message = configuration["TestApp:Settings:Message"];
Console.WriteLine($"Initial value: {configuration["TestApp:Settings:Message"]}");
while (true)
{
await _refresher.TryRefreshAsync();
if (configuration["TestApp:Settings:Message"] != message)
{
Console.WriteLine($"New value: {configuration["TestApp:Settings:Message"]}");
message = configuration["TestApp:Settings:Message"];
}
await Task.Delay(TimeSpan.FromSeconds(1));
}
}
private static void RegisterRefreshEventHandler()
{
string serviceBusConnectionString = Environment.GetEnvironmentVariable(ServiceBusConnectionStringEnvVarName);
string serviceBusTopic = Environment.GetEnvironmentVariable(ServiceBusTopicEnvVarName);
string serviceBusSubscription = Environment.GetEnvironmentVariable(ServiceBusSubscriptionEnvVarName);
SubscriptionClient serviceBusClient = new SubscriptionClient(serviceBusConnectionString, serviceBusTopic, serviceBusSubscription);
serviceBusClient.RegisterMessageHandler(
handler: (message, cancellationToken) =>
{
string messageText = Encoding.UTF8.GetString(message.Body);
JsonElement messageData = JsonDocument.Parse(messageText).RootElement.GetProperty("data");
string key = messageData.GetProperty("key").GetString();
Console.WriteLine($"Event received for Key = {key}");
_refresher.SetDirty();
return Task.CompletedTask;
},
exceptionReceivedHandler: (exceptionargs) =>
{
Console.WriteLine($"{exceptionargs.Exception}");
return Task.CompletedTask;
});
}
}
}
Metoda SetDirty slouží k nastavení hodnoty klíče zaregistrované pro aktualizaci v mezipaměti jako nečtenou. Tím se zajistí, že další volání nebo opětovné ověření hodnot uložených v mezipaměti pomocí App Configuration a v případě RefreshAsync TryRefreshAsync potřeby je aktualizuje.
Náhodné zpoždění se přidá před označením hodnoty uložené v mezipaměti jako nevyčištěné, aby se snížilo potenciální omezování v případě, že se aktualizuje více instancí současně. Výchozí maximální prodleva před označením hodnoty uložené v mezipaměti jako nečtená je 30 sekund, ale je možné ji přepsat předáním volitelného TimeSpan parametru SetDirty metodě .
Poznámka
Pokud chcete snížit počet požadavků na App Configuration při použití nabízené aktualizace, je důležité volat s SetCacheExpiration(TimeSpan cacheExpiration) odpovídající hodnotou cacheExpiration parametru . Tím se řídí doba vypršení platnosti mezipaměti pro aktualizaci tažení a je možné ji použít jako bezpečnostní síť pro případ, že dojde k problému s odběrem události nebo předplatným Service Bus dat. Doporučená hodnota je TimeSpan.FromDays(30) .
Místní sestavení a spuštění aplikace
Nastavte proměnnou prostředí s názvem AppConfigurationConnectionString a nastavte ji na přístupový klíč k vašemu App Configuration úložiště. Pokud použijete příkazový Windows příkazového řádku, spusťte následující příkaz a restartujte příkazový řádek, aby se změna mohla projeví:
setx AppConfigurationConnectionString "connection-string-of-your-app-configuration-store"Pokud používáte Windows PowerShell, spusťte následující příkaz:
$Env:AppConfigurationConnectionString = "connection-string-of-your-app-configuration-store"Pokud používáte macOS nebo Linux, spusťte následující příkaz:
export AppConfigurationConnectionString='connection-string-of-your-app-configuration-store'Spuštěním následujícího příkazu sestavte konzolovou aplikaci:
dotnet buildPo úspěšném dokončení sestavení spusťte následující příkaz, který spustí aplikaci místně:
dotnet run
Přihlaste se k webu Azure Portal. Vyberte Všechny prostředky a vyberte instanci App Configuration, kterou jste vytvořili v rychlém startu.
Vyberte Průzkumníka konfigurace a aktualizujte hodnoty následujících klíčů:
Klíč Hodnota TestApp:Nastavení:Message Data z Azure App Configuration – aktualizováno Počkejte 30 sekund, než se událost zpracuje a konfigurace se aktualizuje.

Vyčištění prostředků
Pokud nechcete dál používat prostředky vytvořené v tomto článku, odstraňte skupinu prostředků, kterou jste tady vytvořili, abyste předešli poplatkům.
Důležité
Odstranění skupiny prostředků je nevratné. Skupina prostředků a všechny prostředky v ní se trvale odstraní. Ujistěte se, že nechtěně neodstraníte nesprávnou skupinu prostředků nebo prostředky. Pokud jste vytvořili prostředky pro tento článek v rámci skupiny prostředků, která obsahuje další prostředky, které chcete zachovat, odstraňte všechny prostředky jednotlivě z příslušného podokna, místo aby se odstranila skupina prostředků.
- Přihlaste se k Azure Portala vyberte skupiny prostředků.
- Do pole filtrovat podle názvu zadejte název vaší skupiny prostředků.
- V seznamu výsledků vyberte název skupiny prostředků, aby se zobrazil přehled.
- Vyberte Odstranit skupinu prostředků.
- Zobrazí se výzva k potvrzení odstranění skupiny prostředků. Zadejte název vaší skupiny prostředků, který chcete potvrdit, a vyberte Odstranit.
Po chvíli se odstraní skupina prostředků a všechny její prostředky.
Další kroky
V tomto kurzu jste aplikaci .NET Core povolili dynamicky aktualizovat nastavení konfigurace z App Configuration. Informace o použití spravované identity Azure ke zjednodušení přístupu k App Configuration najdete v dalším kurzu.