Kılavuz: .NET Aspire mesajlaşma tümleştirmelerini ASP.NET Core'de kullanma
Bulutta yerel uygulamalar genellikle mesajlaşma kuyrukları, konular ve abonelikler gibi özellikler sağlayan ölçeklenebilir mesajlaşma çözümleri gerektirir. .NET Aspire tümleştirmeleri, Azure Service Busgibi çeşitli mesajlaşma sağlayıcılarına bağlanma sürecini basitleştirir. ** Bu öğreticide, bir bildirim sistemi oluşturmak için ASP.NET Core'ye bağlanarak .NET Aspire tümleştirmelerini kullanan bir Azure Service Bus uygulaması oluşturacaksınız. Gönderilen iletiler aboneler tarafından kullanılmak üzere bir Service Bus konusuna gönderilir. Nasıl yapılacağını öğreneceksiniz:
- .NET Aspire tümleştirmelerini kullanacak şekilde ayarlanmış temel bir .NET uygulaması oluşturma
- .NET Aspire'e bağlanmak için Azure Service Bus tümleştirmesi ekleyin
- Veri göndermek ve almak için .NET.NET Aspire tümleştirme özelliklerini yapılandırma ve kullanma
Önkoşullar
.NET .NET Aspireile çalışmak için aşağıdakilerin yerel olarak yüklenmesi gerekir:
- .NET 8.0 veya .NET 9.0
- OCI uyumlu bir kapsayıcı çalıştırma ortamı, örneğin:
- Docker Masaüstü veya Podman. Daha fazla bilgi için bkz. Container runtime.
- Tümleşik Geliştirici Ortamı (IDE) veya kod düzenleyicisi, örneğin:
- Visual Studio 2022 sürüm 17.9 veya üzeri (İsteğe bağlı)
-
Visual Studio Code (İsteğe bağlı)
- C# Dev Kit: Uzantı (İsteğe bağlı)
- JetBrains Rider ile .NET.NET Aspire eklentisi (İsteğe bağlı)
Daha fazla bilgi için bkz. .NET.NET Aspire kurulum ve araçve .NET.NET Aspire SDK.
Önceki önkoşullara ek olarak, Azure CLI'yi de yüklemeniz gerekir.
Azure Service Bus hesabını ayarlama
Bu öğreticide, üzerinde konu ve abonelik yapılandırılmış bir Azure Service Bus ad alanına erişmeniz gerekir. Gerekli kaynakları ayarlamak için aşağıdaki seçeneklerden birini kullanın:
: konusu ve aboneliğiile service bus hesabı oluşturmaportal .
Alternatif olarak:
CLI
: Gerekli kaynaklarını ayarlamak için CLI veya CloudShell'de aşağıdaki komutları çalıştırın: az group create -n <your-resource-group-name> --location eastus az servicebus namespace create -g <your-resource-group-name> --name <your-namespace-name> --location eastus az servicebus topic create -g <your-resource-group-name> --namespace-name <your-namespace-name> --name notifications az servicebus topic subscription create -g <your-resource-group-name> --namespace-name <your-namespace-name> --topic-name notifications --name mobile
Not
Kendi değerlerinizle kaynak grubu adı ve ad alanınızın adı yer tutucularını değiştirin. Service Bus ad alanı adları Azuregenelinde genel olarak benzersiz olmalıdır.
Azure kimlik doğrulaması
Bu hızlı başlangıç parolasız kimlik doğrulaması veya bağlantı dizesi kullanılarak tamamlanabilir. Parolasız bağlantılar, Service Bus ad alanına bağlanmak için Active Directory ve rol tabanlı erişim denetimi (RBAC) Azure kullanır. Kodunuzda, yapılandırma dosyanızda veya Azure Key Vaultgibi güvenli depolama alanında sabit kodlanmış bağlantı dizesi olması konusunda endişelenmeniz gerekmez.
Service Bus ad alanına bağlanmak için bir bağlantı dizesi de kullanabilirsiniz, ancak gerçek dünya uygulamaları ve üretim ortamları için parolasız yaklaşım önerilir. Daha fazla bilgi için
Service Bus ad alanınızda, Visual Studio veya Azure CLI'da oturum açtığınız kullanıcı hesabına aşağıdaki rolü atayın:
- Service Bus Veri Sahibi: Azure RBAC rolünü atayın
Örnek çözümü oluşturma
Yeni .NET Aspire Başlangıç Uygulaması oluşturmak için Visual Studio, Visual Studio Codeveya .NET CLI kullanabilirsiniz.
Visual Studio, sizin için bazı ilk kurulum yapılandırmalarını işleyen .NET Aspire şablonları sağlar. Bu hızlı başlangıçta proje oluşturmak için aşağıdaki adımları tamamlayın:
Visual Studioüst kısmında Dosya>Yeni>Projectadresine gidin.
İletişim kutusunda Aspire arayın ve .NET.NET Aspire başlangıç uygulamasıseçin. sonrakiseçin.
Yeni projenizi yapılandırın ekranında:
- AspireSampleProje Adı girin.
- Kalan değerleri varsayılan ayarlarında bırakın ve İleriseçin.
Ek bilgiler ekranında:
- .NET 9.0 (Standart Terim Desteği) seçildiğinden emin olun.
- Önbelleğe alma için Redis kullan (desteklenen bir kapsayıcı çalışma zamanı gerektirir) işaretli olduğundan emin olun ve oluştur'u seçin.
- İsteğe bağlı olarak, Test projesi oluşturseçebilirsiniz. Daha fazla bilgi için: bkz. İlk .NET.NET Aspire testinizi yazın.
Visual Studio, .NET Aspirekullanmak üzere yapılandırılmış yeni bir çözüm oluşturur.
Visual Studio Code, sizin için bazı ilk kurulum yapılandırmalarını işleyen .NET Aspire proje şablonları sağlar. Bu hızlı başlangıçta proje oluşturmak için aşağıdaki adımları tamamlayın:
dotnet new install Aspire.ProjectTemplates
Yukarıdaki .NET CLI komutu, .NET Aspire şablonlarının kullanılabilir olmasını sağlar. Şablondan .NET.NET Aspire Starter Uygulaması oluşturmak için aşağıdaki dotnet new
komutunu çalıştırın:
dotnet new aspire-starter --use-redis-cache --output AspireSample
Daha fazla bilgi için bkz. dotnet new. .NET CLI, .NET Aspirekullanacak şekilde yapılandırılmış yeni bir çözüm oluşturur.
Worker Service projesini ekleme
Ardından, Worker Serviceiletileri almak ve işlemek için çözüme bir Azure Service Bus projesi ekleyin.
- Çözüm gezgininde, en üst düzey
AspireSample
çözüm düğümüne sağ tıklayın ve Ekle>Yeni projeöğesini seçin. - Worker Service şablonunu arayıp seçin ve İleriseçin.
- Proje adıiçin AspireSample.WorkerService girin ve Sonraki'yiseçin.
-
Ek bilgiler ekranında:
- .NET 9.0 seçildiğinden emin olun.
- .NET .NET Aspire orkestrasyon öğesinde Listele'nin işaretli olduğundan emin olun ve Oluşturöğesini seçin.
Visual Studio projeyi çözümünüze ekler ve AspireSample.AppHost
projesinin Program.cs dosyasını yeni bir kod satırıyla güncelleştirir:
builder.AddProject<Projects.AspireSample_WorkerService>(
"aspiresample-workerservice");
Visual Studio araçları, yeni projenizi daha sonra keşfedebileceğiniz düzenleme özelliklerini etkinleştiren IDistributedApplicationBuilder nesnesine kaydetmek için bu kod satırını ekledi.
Visual Studio Code çözüm adının yanındaki + düğmesini seçerek çözüme yeni bir proje ekleyin:
Proje şablonlarını filtrelemek için arama kutusuna çalışan
girin ve bulunan şablonunu seçin: şablonunu seçin ve proje adını AspireSample.WorkerService olarak girin. Projeyi çözümle aynı dizinde oluşturmak için Varsayılan dizin
seçin. Projeyi çözüme eklemek için proje oluştur
seçin. Çözüm Gezgini AspireSample.AppHost projesisağ tıklayın ve proje başvurusu ekle seçin: builder.Build().Run();
çağrısından önce AspireSample.AppHost projesindeki Program.cs dosyasına aşağıdaki kod satırını ekleyin:builder.AddProject<Projects.AspireSample_WorkerService>( "aspiresample-workerservice");
Uygulamanın kök dizininde yeni bir Worker Service uygulaması oluşturmak için dotnet new komutunu kullanın:
dotnet new worker --name AspireSample.WorkerService
Projeyi çözüme eklemek için
dotnet sln
komutunu kullanın:dotnet sln AspireSample.sln add AspireSample.WorkerService/AspireSample.WorkerService.csproj
dotnet add
komutunu kullanarak .AppHost ve .WorkerService projeleri arasında bir proje referansı ekleyin.dotnet add AspireSample.AppHost/AspireSample.AppHost.csproj reference AspireSample.WorkerService/AspireSample.WorkerService.csproj
builder.Build().Run();
çağrısından önce AspireSample.AppHost projesindeki Program.cs dosyasına aşağıdaki kod satırını ekleyin:builder.AddProject<Projects.AspireSample_WorkerService>( "aspiresample-workerservice");
En üst düzey dizinin aspire-messagingolarak adlandırıldığı varsayılarak, tamamlanmış çözüm yapısı aşağıdakine benzemelidir:
└───📂 aspire-messaging
├───📂 AspireSample.WorkerService
│ ├───📂 Properties
│ │ └─── launchSettings.json
│ ├─── appsettings.Development.json
│ ├─── appsettings.json
│ ├─── AspireSample.WorkerService.csproj
│ ├─── Program.cs
│ └─── Worker.cs
├───📂 AspireSample.ApiService
│ ├───📂 Properties
│ │ └─── launchSettings.json
│ ├─── appsettings.Development.json
│ ├─── appsettings.json
│ ├─── AspireSample.ApiService.csproj
│ └─── Program.cs
├───📂 AspireSample.AppHost
│ ├───📂 Properties
│ │ └─── launchSettings.json
│ ├─── appsettings.Development.json
│ ├─── appsettings.json
│ ├─── AspireSample.AppHost.csproj
│ └─── Program.cs
├───📂 AspireSample.ServiceDefaults
│ ├─── AspireSample.ServiceDefaults.csproj
│ └─── Extensions.cs
├───📂 AspireSample.Web
│ ├───📂 Components
│ │ ├───📂 Layout
│ │ │ ├─── MainLayout.razor
│ │ │ ├─── MainLayout.razor.css
│ │ │ ├─── NavMenu.razor
│ │ │ └─── NavMenu.razor.css
│ │ ├───📂 Pages
│ │ │ ├─── Counter.razor
│ │ │ ├─── Error.razor
│ │ │ ├─── Home.razor
│ │ │ └─── Weather.razor
│ │ ├─── _Imports.razor
│ │ ├─── App.razor
│ │ └─── Routes.razor
│ ├───📂 Properties
│ │ └─── launchSettings.json
│ ├───📂 wwwroot
│ │ ├───📂 bootstrap
│ │ │ ├─── bootstrap.min.css
│ │ │ └─── bootstrap.min.css.map
│ │ ├─── app.css
│ │ └─── favicon.png
│ ├─── appsettings.Development.json
│ ├─── appsettings.json
│ ├─── AspireSample.Web.csproj
│ ├─── Program.cs
│ └─── WeatherApiClient.cs
└─── AspireSample.sln
API'ye .NET.NET Aspire tümleştirmesini ekleme
AspireSample.ApiService uygulamanıza .NET Aspire Azure Service Bus tümleştirmesini ekleyin:
Çözüm Gezgini, AspireSample.ApiService.csproj dosyasına çift tıklayarak XML dosyasını açın.
aşağıdaki
<PackageReference>
öğesini<ItemGroup>
öğesine ekleyin:<ItemGroup> <PackageReference Include="Aspire.Azure.Messaging.ServiceBus" Version="8.0.1" /> </ItemGroup>
dotnet add package Aspire.Azure.Messaging.ServiceBus
AspireSample.ApiService projesinin Program.cs dosyasında, AddAzureServiceBusClient
uzantısı yöntemine bir çağrı ekleyin ve mevcut AddServiceDefaults
çağrısını değiştirin:
// Add service defaults & Aspire integrations.
builder.AddServiceDefaults();
builder.AddAzureServiceBusClient("serviceBusConnection");
Daha fazla bilgi için bkz. AddAzureServiceBusClient.
Bu yöntem aşağıdaki görevleri gerçekleştirir:
- ServiceBusClient'e bağlanmak için DI kapsayıcısına bir Azure Service Bus kaydeder.
- İlgili hizmetler için sağlık kontrolleri, günlük kaydı ve telemetriyi otomatik olarak etkinleştirir.
Aynı projenin appsettings.json dosyasına ilgili bağlantı bilgilerini ekleyin:
{
// Existing configuration is omitted for brevity.
"ConnectionStrings": {
"serviceBusConnection": "{your_namespace}.servicebus.windows.net"
}
}
Not
Hizmet URI’lerindeki {your_namespace} ifadesini, kendi Service Bus ad alanınızın adıyla değiştirdiğinizden emin olun.
API uç noktasını oluşturma
API, verileri almak, Service Bus konusuna yayımlamak ve abonelere iletmek için bir uç nokta sağlamalıdır. Service Bus konusuna ileti göndermek için aşağıdaki uç noktayı AspireSample.ApiService projesine ekleyin. Program.cs dosyasının tüm içeriğini aşağıdaki C# koduyla değiştirin:
using Azure.Messaging.ServiceBus;
var builder = WebApplication.CreateBuilder(args);
// Add service defaults & Aspire integrations.
builder.AddServiceDefaults();
builder.AddAzureServiceBusClient("serviceBusConnection");
// Add services to the container.
builder.Services.AddProblemDetails();
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseExceptionHandler();
app.MapPost("/notify", static async (ServiceBusClient client, string message) =>
{
var sender = client.CreateSender("notifications");
// Create a batch
using ServiceBusMessageBatch messageBatch =
await sender.CreateMessageBatchAsync();
if (messageBatch.TryAddMessage(
new ServiceBusMessage($"Message {message}")) is false)
{
// If it's too large for the batch.
throw new Exception(
$"The message {message} is too large to fit in the batch.");
}
// Use the producer client to send the batch of
// messages to the Service Bus topic.
await sender.SendMessagesAsync(messageBatch);
Console.WriteLine($"A message has been published to the topic.");
});
app.MapDefaultEndpoints();
app.Run();
.NET Aspire entegrasyonunu Worker Service'e ekleyin.
AspireSample.WorkerService projenize .NET Aspire Azure Service Bus tümleştirmesini ekleyin. Aspireeklerken uyguladığınız adımların aynısını izleyin.Azure. Messaging.ServiceBus AspireSample.ApiService projesine NuGet paketi. Eklendikten sonra, Service Bus konusuyla iletileri işlemek için çalışan hizmetini yapılandırabilirsiniz.
AspireSample.WorkerService projesinin Program.cs dosyasında, var olan kodu aşağıdakilerle yeniden yapıştırın:
using AspireSample.WorkerService;
var builder = Host.CreateApplicationBuilder(args);
builder.AddAzureServiceBusClient("serviceBusConnection");
builder.Services.AddHostedService<Worker>();
var host = builder.Build();
host.Run();
AddAzureServiceBusClient
yöntemi aşağıdaki görevleri gerçekleştirir:
- ServiceBusClient'e bağlanmak için DI kapsayıcısına bir Azure Service Bus kaydeder.
- İlgili hizmetler için sağlık kontrolleri, günlük kaydı ve telemetriyi otomatik olarak etkinleştirir.
AspireSample.WorkerService projesinin appsettings.json dosyasına ilgili bağlantı bilgilerini ekleyin:
{
// Existing configuration is omitted for brevity.
"ConnectionStrings": {
"serviceBusConnection": "{your_namespace}.servicebus.windows.net"
}
}
Not
Hizmet URI'lerindeki {your_namespace} ifadelerini, kendi Service Bus ad alanınızın adıyla değiştirdiğinizden emin olun.
Aboneden gelen iletiyi işleme
messages
kuyruğuna yeni bir ileti yerleştirildiğinde, çalışma hizmetinin iletiyi alması, işlemesi ve silmesi gerekir.
Worker.cs sınıfını aşağıdaki kodla eşleşecek şekilde güncelleştirin:
using Azure.Messaging.ServiceBus;
namespace AspireSample.WorkerService;
public sealed class Worker(
ILogger<Worker> logger,
ServiceBusClient client) : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
var processor = client.CreateProcessor(
"notifications",
"mobile",
new ServiceBusProcessorOptions());
// Add handler to process messages
processor.ProcessMessageAsync += MessageHandler;
// Add handler to process any errors
processor.ProcessErrorAsync += ErrorHandler;
// Start processing
await processor.StartProcessingAsync();
logger.LogInformation("""
Wait for a minute and then press any key to end the processing
""");
Console.ReadKey();
// Stop processing
logger.LogInformation("""
Stopping the receiver...
""");
await processor.StopProcessingAsync();
logger.LogInformation("Stopped receiving messages");
}
}
async Task MessageHandler(ProcessMessageEventArgs args)
{
string body = args.Message.Body.ToString();
logger.LogInformation("Received: {Body} from subscription.", body);
// Complete the message. messages is deleted from the subscription.
await args.CompleteMessageAsync(args.Message);
}
// Handle any errors when receiving messages
Task ErrorHandler(ProcessErrorEventArgs args)
{
logger.LogError(args.Exception, "{Error}", args.Exception.Message);
return Task.CompletedTask;
}
}
Uygulamayı yerel olarak çalıştırma ve test edin
Örnek uygulama artık test için hazırdır. API'ye gönderilen verilerin Azure Service Bus konusuna gönderildiğini ve abone çalışan hizmeti tarafından tüketildiğini doğrulayın:
- Başlat hata ayıklama düğmesini seçerek veya F5tuşlarına basarak .NET.NET Aspire projesini başlatın. .NET .NET Aspire pano uygulaması tarayıcıda açılmalıdır.
- Başlat hata ayıklama düğmesini seçerek veya F5tuşlarına basarak .NET.NET Aspire projesini başlatın. .NET .NET Aspire pano uygulaması tarayıcıda açılmalıdır.
-
dotnet run --project AspireSample.AppHost
çalıştırarak .NET.NET Aspire projesini başlatın. .NET .NET Aspire pano uygulaması tarayıcıda açılmalıdır.
Kaynaklar sayfasındaki apiservice satırında, Uç Noktaları içinde,
weatherforecast
uç noktasını açan bağlantıyı bulun. HTTPS bağlantı noktası numarasını not edin..NET .NET Aspire panosunda, aspiresample-workerservice projesinin günlüklerini görüntüleyin.
Terminal penceresinde
curl
komutunu kullanarak API'ye bir test iletisi gönderin:curl -X POST -H "Content-Type: application/json" https://localhost:{port}/notify?message=hello%20aspire
{port}'i önceki bağlantı noktası numarasıyla değiştirdiğinizden emin olun.
aspiresample-workerservice günlüklerine geri dönün. Çıkış kayıtlarında test mesajının yazılı olduğunu görmelisiniz.
Tebrikler! ASP.NET Core API'si oluşturup, Azure Service Bus'e bağlanması için Aspire tümleştirmelerini yapılandırdınız.
Kaynakları temizleme
Oluşturduğunuz Azure kaynaklarına artık ihtiyacınız kalmadığında kaynak grubunu silmek için aşağıdaki Azure CLI komutunu çalıştırın. Kaynak grubunun silinmesi, içinde yer alan kaynakları da siler.
az group delete --name <your-resource-group-name>
Daha fazla bilgi için bkz. 'daki kaynakları temizleme Azure.
.NET Aspire