Öğretici: .NET uygulamasında anında iletme yenileme kullanarak dinamik yapılandırma kullanma
Uygulama Yapılandırması .NET istemci kitaplığı, bir uygulamanın yeniden başlatılmasına neden olmadan yapılandırmanın isteğe bağlı olarak güncelleştirilmesini destekler. Bir uygulama, aşağıdaki iki yaklaşımdan biri veya her ikisi kullanılarak Uygulama Yapılandırması değişiklikleri algılamak için yapılandırılabilir.
Yoklama Modeli: Bu, yapılandırmadaki değişiklikleri algılamak için yoklama kullanan varsayılan davranıştır. Bir ayarın önbelleğe alınmış değeri sona erdikten sonra, sonraki çağrısı
TryRefreshAsync
veyaRefreshAsync
sunucuya yapılandırmanın değişip değişmediğini denetlemek için bir istek gönderir ve gerekirse güncelleştirilmiş yapılandırmayı çeker.Gönderme Modeli: Bu, yapılandırmadaki değişiklikleri algılamak için Uygulama Yapılandırması olayları kullanır. Uygulama Yapılandırması, anahtar değer değişikliği olaylarını Azure Event Grid'e gönderecek şekilde ayarlandıktan sonra, uygulama yapılandırmayı güncel tutmak için gereken toplam istek sayısını iyileştirmek için bu olayları kullanabilir. Uygulamalar bunlara doğrudan Event Grid'den veya web kancası, Azure işlevi veya Service Bus konusu gibi desteklenen olay işleyicilerinden biri aracılığıyla abone olmayı seçebilir.
Bu öğreticide, anında yenilemeyi kullanarak kodunuzda dinamik yapılandırma güncelleştirmelerini nasıl uygulayabileceğiniz gösterilmektedir. Öğreticide tanıtılan uygulama üzerinde derler. Devam etmeden önce Öğretici: Önce bir .NET uygulamasında dinamik yapılandırmayı kullanma işlemini tamamlayın.
Bu öğreticideki adımları gerçekleştirmek için herhangi bir kod düzenleyicisini kullanabilirsiniz. Visual Studio Code , Windows, macOS ve Linux platformlarında kullanılabilen mükemmel bir seçenektir.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- Yapılandırma değişikliği olaylarını Uygulama Yapılandırması Service Bus konusuna göndermek için bir abonelik ayarlama
- .NET uygulamanızı Uygulama Yapılandırması'daki değişikliklere yanıt olarak yapılandırmasını güncelleştirecek şekilde ayarlayın.
- Uygulamanızda en son yapılandırmayı kullanma.
Önkoşullar
- Öğretici: .NET uygulamasında dinamik yapılandırma kullanma
- NuGet paketi
Microsoft.Extensions.Configuration.AzureAppConfiguration
sürüm 5.0.0 veya üzeri
Azure Service Bus konusunu ve aboneliğini ayarlama
Bu öğreticide, sürekli olarak değişiklikler için Uygulama Yapılandırması yoklama yapmak istemeyen uygulamaların yapılandırma değişikliklerini algılamayı basitleştirmek amacıyla Event Grid için Service Bus tümleştirmesi gerçekleştirilir. Azure Service Bus SDK'sı, Uygulama Yapılandırması'de değişiklikler algılandığında yapılandırmayı güncelleştirmek için kullanılabilecek bir ileti işleyicisi kaydetmek için bir API sağlar. Hızlı Başlangıç: Service Bus konu başlığı ve aboneliği oluşturmak için Azure portalını kullanarak service bus ad alanı, konu ve abonelik oluşturma adımlarını izleyin.
Kaynaklar oluşturulduktan sonra aşağıdaki ortam değişkenlerini ekleyin. Bunlar, uygulama kodundaki yapılandırma değişiklikleri için bir olay işleyicisi kaydetmek için kullanılır.
Anahtar | Değer |
---|---|
ServiceBus Bağlan ionString | Service Bus ad alanı için Bağlan ion dizesi |
ServiceBusTopic | Service Bus konusunun adı |
ServiceBusSubscription | Service Bus aboneliğinin adı |
Olay aboneliğini ayarlama
Azure portalında Uygulama Yapılandırması kaynağını açın ve bölmede
Events
öğesine tıklayın+ Event Subscription
.ve
System Topic
içinEvent Subscription
bir ad girin.olarak
Service Bus Topic
öğesiniEndpoint Type
seçin, Service Bus konusunu seçin ve ardından öğesineConfirm Selection
tıklayın.Create
Olay aboneliğini oluşturmak için öğesine tıklayın.Event Subscriptions
AboneliğinEvents
başarıyla oluşturulduğunu doğrulamak için bölmeye tıklayın.
Not
Yapılandırma değişikliklerine abone olurken, uygulamanıza gönderilen olay sayısını azaltmak için bir veya daha fazla filtre kullanılabilir. Bunlar Event Grid abonelik filtreleri veya Service Bus abonelik filtreleri olarak yapılandırılabilir. Örneğin, abonelik filtresi yalnızca belirli bir dizeyle başlayan bir anahtardaki değişiklikler için olaylara abone olmak için kullanılabilir.
verileri Uygulama Yapılandırması yeniden yüklemek için olay işleyicisini kaydetme
Program.cs açın ve dosyayı aşağıdaki kodla güncelleştirin.
using Azure.Messaging.EventGrid;
using Azure.Messaging.ServiceBus;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.AzureAppConfiguration;
using Microsoft.Extensions.Configuration.AzureAppConfiguration.Extensions;
using System;
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")
// Important: Reduce poll frequency
.SetCacheExpiration(TimeSpan.FromDays(1))
);
_refresher = options.GetRefresher();
}).Build();
await 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 async Task RegisterRefreshEventHandler()
{
string serviceBusConnectionString = Environment.GetEnvironmentVariable(ServiceBusConnectionStringEnvVarName);
string serviceBusTopic = Environment.GetEnvironmentVariable(ServiceBusTopicEnvVarName);
string serviceBusSubscription = Environment.GetEnvironmentVariable(ServiceBusSubscriptionEnvVarName);
ServiceBusClient serviceBusClient = new ServiceBusClient(serviceBusConnectionString);
ServiceBusProcessor serviceBusProcessor = serviceBusClient.CreateProcessor(serviceBusTopic, serviceBusSubscription);
serviceBusProcessor.ProcessMessageAsync += (processMessageEventArgs) =>
{
// Build EventGridEvent from notification message
EventGridEvent eventGridEvent = EventGridEvent.Parse(BinaryData.FromBytes(processMessageEventArgs.Message.Body));
// Create PushNotification from eventGridEvent
eventGridEvent.TryCreatePushNotification(out PushNotification pushNotification);
// Prompt Configuration Refresh based on the PushNotification
_refresher.ProcessPushNotification(pushNotification);
return Task.CompletedTask;
};
serviceBusProcessor.ProcessErrorAsync += (exceptionargs) =>
{
Console.WriteLine($"{exceptionargs.Exception}");
return Task.CompletedTask;
};
await serviceBusProcessor.StartProcessingAsync();
}
}
}
ProcessPushNotification
yöntemi önbellek süre sonunu kısa bir rastgele gecikmeye sıfırlar. Bu, önbelleğe RefreshAsync
TryRefreshAsync
alınan değerlerin Uygulama Yapılandırması karşı yeniden doğrulanması ve gerektiğinde güncelleştirilmesi için gelecekteki çağrıların yapılmasına neden olur. Bu örnekte anahtardaki değişiklikleri izlemek için kaydolacaksınız: TestApp:Ayarlar:Önbellek süresi bir gün olan ileti. Bu, son denetimden sonraki bir gün geçmeden Uygulama Yapılandırması isteğinde bulunulmayacağı anlamına gelir. Uygulamanızı çağırarak ProcessPushNotification
sonraki birkaç saniye içinde Uygulama Yapılandırması istekleri gönderir. Uygulamanız, güncelleştirmeleri sürekli yoklamanıza gerek kalmadan depoda App Configuration
değişiklikler gerçekleştikten kısa süre sonra yeni yapılandırma değerlerini yükler. Uygulamanızın herhangi bir nedenle değişiklik bildirimini kaçırması durumunda, yapılandırma değişikliklerini günde bir kez denetlemeye devam eder.
Uygulamanızın veya mikro hizmetlerin gönderme modeliyle aynı Uygulama Yapılandırması deposuna bağlanan birçok örneğiniz varsa önbellek süre sonu için kısa rastgele gecikme yararlı olur. Bu gecikme olmadan, uygulamanızın tüm örnekleri değişiklik bildirimi alır almaz aynı anda Uygulama Yapılandırması deponuza istek gönderebilir. Bu, Uygulama Yapılandırması Hizmeti'nin mağazanızı kısıtlamasına neden olabilir. Önbellek süre sonu gecikmesi varsayılan olarak 0 ile en fazla 30 saniye arasında rastgele bir sayıya ayarlanır, ancak isteğe bağlı parametresi maxDelay
aracılığıyla en yüksek değeri yöntemiyle ProcessPushNotification
değiştirebilirsiniz.
yöntemi, ProcessPushNotification
Uygulama Yapılandırması anında iletme bildirimini tetikleyen değişiklik hakkında bilgi içeren bir PushNotification
nesne alır. Bu, aşağıdaki yapılandırma yenilemesinde tetikleyici olayına kadar olan tüm yapılandırma değişikliklerinin yüklendiğinden emin olunmasını sağlar. yöntemi anında SetDirty
yapılandırma yenilemesinde anında iletme bildiriminin yüklenmesini tetikleyen değişikliği garanti etmez. Gönderme modeli için yöntemini kullanıyorsanız SetDirty
, bunun yerine yöntemini kullanmanızı ProcessPushNotification
öneririz.
Uygulamayı yerel olarak derleme ve çalıştırma
AppConfiguration Bağlan ionString adlı bir ortam değişkeni ayarlayın ve bunu Uygulama Yapılandırması deponuzun erişim anahtarına ayarlayın.
Windows komut istemini kullanarak uygulamayı yerel olarak derlemek ve çalıştırmak için aşağıdaki komutu çalıştırın ve değişikliğin etkili olması için komut istemini yeniden başlatın:
setx AppConfigurationConnectionString "connection-string-of-your-app-configuration-store"
Konsol uygulamasını oluşturmak için aşağıdaki komutu çalıştırın:
dotnet build
Derleme başarıyla tamamlandıktan sonra aşağıdaki komutu çalıştırarak uygulamayı yerel olarak çalıştırın:
dotnet run
Azure Portal’ında oturum açın. Tüm kaynaklar'ı seçin ve hızlı başlangıçta oluşturduğunuz Uygulama Yapılandırması mağaza örneğini seçin.
Yapılandırma Gezgini'ni seçin ve aşağıdaki anahtarların değerlerini güncelleştirin:
Anahtar Değer TestApp:Ayarlar:Message Azure Uygulaması Yapılandırmasından Veriler - Güncelleştirildi Olayın işlenmesine izin vermek için birkaç dakika bekleyin. Güncelleştirilmiş yapılandırmayı görürsünüz.
Kaynakları temizleme
Bu makalede oluşturulan kaynakları kullanmaya devam etmek istemiyorsanız ücretlerden kaçınmak için burada oluşturduğunuz kaynak grubunu silin.
Önemli
Silinen kaynak grupları geri alınamaz. Kaynak grubu ve içindeki tüm kaynaklar kalıcı olarak silinir. Yanlış kaynak grubunu veya kaynakları yanlışlıkla silmediğinizden emin olun. Bu makalenin kaynaklarını, saklamak istediğiniz diğer kaynakları içeren bir kaynak grubu içinde oluşturduysanız, kaynak grubunu silmek yerine her kaynağı ilgili bölmeden tek tek silin.
- Azure portalında oturum açın ve Kaynak grupları'nı seçin.
- Ada göre filtrele kutusuna kaynak grubunuzun adını girin.
- Genel bir bakış görmek için sonuç listesinde kaynak grubu adını seçin.
- Kaynak grubunu sil'i seçin.
- Kaynak grubunun silinmesini onaylamanız istenir. Onaylamak için kaynak grubunuzun adını girin ve Sil'i seçin.
Birkaç dakika sonra kaynak grubu ve tüm kaynakları silinir.
Sonraki adımlar
Bu öğreticide yapılandırma ayarlarını Uygulama Yapılandırması dinamik olarak yenilemek için .NET uygulamanızı etkinleştirmişsiniz. Azure yönetilen kimliğini kullanarak Uygulama Yapılandırması erişimini kolaylaştırmayı öğrenmek için sonraki öğreticiye geçin.