Tutorial: Menggunakan integrasi olahpesan .NET Aspire di ASP.NET Core
Aplikasi cloud-native sering memerlukan solusi olahpesan yang dapat diskalakan yang menyediakan kemampuan seperti antrean dan topik olahpesan serta langganan. .NET Aspire integrasi menyederhanakan proses menghubungkan dengan berbagai penyedia olahpesan, seperti Azure Service Bus. Dalam tutorial ini, Anda akan membuat aplikasi ASP.NET Core yang menggunakan integrasi .NET Aspire untuk terhubung ke Azure Service Bus untuk membuat sistem pemberitahuan. Pesan yang dikirimkan akan dikirim ke topik Service Bus untuk dikonsumsi oleh pelanggan berlangganan. Anda akan mempelajari cara:
- Membuat aplikasi .NET dasar yang disiapkan untuk menggunakan integrasi .NET Aspire
- Menambahkan integrasi .NET Aspire untuk menyambungkan ke Azure Service Bus
- Mengonfigurasi dan menggunakan fitur integrasi .NET.NET Aspire untuk mengirim dan menerima data
Prasyarat
Untuk bekerja dengan .NET.NET Aspire, Anda memerlukan hal berikut yang diinstal secara lokal:
- .NET 8.0 atau .NET 9.0
- Runtime kontainer yang sesuai dengan OCI, seperti:
- Docker Desktop atau Podman. Untuk informasi selengkapnya, lihat Container runtime .
- Lingkungan Pengembang Terintegrasi (IDE) atau editor kode, seperti:
- Visual Studio 2022 versi 17.9 atau lebih tinggi (Opsional)
-
Visual Studio Code (Opsional)
- C# Dev Kit: Ekstensi (Opsional)
- JetBrains Rider dengan plugin .NET.NET Aspire (Opsional)
Untuk informasi selengkapnya, lihat penyiapan dan alat .NET.NET Aspire, dan .NET.NET Aspire SDK.
Selain prasyarat sebelumnya, Anda juga perlu menginstal CLI Azure. Untuk menginstal CLI Azure, ikuti instruksi dalam panduan penginstalan CLI Azure.
Menyiapkan akun Azure Service Bus
Untuk tutorial ini, Anda memerlukan akses ke namespace Azure Service Bus dengan topik dan langganan yang dikonfigurasi. Gunakan salah satu opsi berikut untuk menyiapkan sumber daya yang diperlukan:
- Azure portal: Membuat akun bus layanan dengan topik dan langganan.
Atau:
Azure CLI: Jalankan perintah berikut di Azure CLI atau CloudShell untuk menyiapkan sumber daya Azure Service Bus yang diperlukan:
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
Nota
Ganti nama grup sumber daya Anda dan placeholder nama namespace Anda dengan nilai Anda sendiri. Nama namespace Service Bus harus unik secara global di seluruh Azure.
autentikasi Azure
Mulai cepat ini dapat diselesaikan menggunakan autentikasi tanpa kata sandi atau string koneksi. Koneksi tanpa kata sandi menggunakan Azure Active Directory dan kontrol akses berbasis peran (RBAC) untuk menyambungkan ke namespace Service Bus. Anda tidak perlu khawatir memiliki string koneksi yang dikodekan secara permanen dalam kode Anda, file konfigurasi, atau dalam penyimpanan aman seperti Azure Key Vault.
Anda juga dapat menggunakan string koneksi untuk menyambungkan ke namespace Service Bus, tetapi pendekatan tanpa kata sandi direkomendasikan untuk aplikasi dunia nyata dan lingkungan produksi. Untuk informasi selengkapnya, baca tentang Autentikasi dan otorisasi
-
Tanpa Kata Sandi (Disarankan) - String koneksi
Di namespace Service Bus Anda, tetapkan peran berikut ke akun pengguna yang Anda masuk ke dalamnya dengan Visual Studio atau CLI Azure:
- Pemilik Data Service Bus: menetapkan peran RBAC Azure
Membuat solusi sampel
Untuk membuat Aplikasi Pemula .NET Aspire baru, Anda dapat menggunakan Visual Studio, Visual Studio Code, atau CLI .NET.
Visual Studio menyediakan templat .NET Aspire yang menangani beberapa konfigurasi penyiapan awal untuk Anda. Selesaikan langkah-langkah berikut untuk membuat proyek untuk panduan cepat ini:
Di bagian atas Visual Studio, navigasikan ke File >Proyek>Baru.
Di jendela dialog, cari Aspire dan pilih .NET.NET Aspire Starter App. Pilih Berikutnya.
Di layar Konfigurasikan proyek baru Anda:
- Masukkan Nama Proyek dari AspireSample.
- Biarkan nilai lainnya di defaultnya dan pilih Berikutnya.
Pada layar informasi tambahan:
- Pastikan .NET 9.0 (Dukungan Istilah Standar) dipilih.
- Pastikan Gunakan Redis untuk caching (memerlukan runtime kontainer yang didukung) sudah dicentang dan pilih Buat.
- Secara opsional, Anda dapat memilih Membuat proyek pengujian. Untuk informasi selengkapnya, lihat Tulis tes .NET.NET Aspire pertama Anda.
Visual Studio membuat solusi baru yang disusun untuk menggunakan .NET Aspire.
Visual Studio Code menyediakan templat proyek .NET Aspire yang menangani beberapa konfigurasi penyiapan awal untuk Anda. Selesaikan langkah-langkah berikut untuk membuat proyek untuk panduan cepat ini:
Jika Anda belum menginstal templat .NET.NET Aspire, jalankan perintah dotnet new install
berikut:
dotnet new install Aspire.ProjectTemplates
Perintah CLI .NET sebelumnya memastikan bahwa Anda memiliki templat .NET Aspire yang tersedia. Untuk membuat Aplikasi Pemula .NET.NET Aspire dari templat, jalankan perintah dotnet new
berikut:
dotnet new aspire-starter --use-redis-cache --output AspireSample
Untuk informasi selengkapnya, lihat dotnet baru . CLI .NET membuat solusi baru yang dirancang untuk menggunakan .NET Aspire.
Menambahkan proyek Worker Service
Selanjutnya, tambahkan proyek Worker Service ke solusi untuk mengambil dan memproses pesan ke dan dari Azure Service Bus.
- Di penjelajah solusi, klik kanan pada simpul solusi
AspireSample
tingkat atas dan pilih Tambahkan>Proyek baru. - Cari dan pilih templat Worker Service dan pilih Berikutnya.
- Untuk nama proyek , masukkan AspireSample.WorkerService dan pilih Berikutnya.
- Pada layar informasi tambahan:
- Pastikan .NET 9.0 dipilih.
- Pastikan Daftar ke .NET.NET Aspire orkestrasi dicentang dan pilih Buat.
Visual Studio menambahkan proyek ke solusi Anda dan memperbarui file Program.cs proyek AspireSample.AppHost
dengan baris kode baru:
builder.AddProject<Projects.AspireSample_WorkerService>(
"aspiresample-workerservice");
Visual Studio menambahkan baris kode berikut untuk mendaftarkan proyek baru Anda dengan objek IDistributedApplicationBuilder, yang mengaktifkan fitur orkestrasi yang dapat Anda jelajahi lebih lanjut.
Dari Penjelajah Solusi, pilih tombol + di samping nama solusi untuk menambahkan proyek baru ke solusi.
Untuk memfilter templat proyek, masukkan Worker di kotak pencarian dan pilih templat Worker Service yang ditemukan:
Pilih templat Worker Service dan masukkan nama proyek sebagai AspireSample.WorkerService.
Pilih Direktori default untuk membuat proyek di direktori yang sama dengan solusi.
Pilih Buat proyek untuk menambahkan proyek ke solusi.
Klik kanan proyek AspireSample.AppHost di Penjelajah Solusi, pilih Tambahkan Referensi Proyek lalu pilih AspireSample.WorkerService:
Tambahkan baris kode berikut ke file Program.cs di proyek AspireSample.AppHost sebelum panggilan ke
builder.Build().Run();
:builder.AddProject<Projects.AspireSample_WorkerService>( "aspiresample-workerservice");
Di direktori akar aplikasi, gunakan perintah baru
dotnet untuk membuat aplikasi baru: dotnet new worker --name AspireSample.WorkerService
Gunakan perintah
dotnet sln
untuk menambahkan proyek ke solusi:dotnet sln AspireSample.sln add AspireSample.WorkerService/AspireSample.WorkerService.csproj
Gunakan perintah
dotnet add
untuk menambahkan referensi projek antara .AppHost dan .WorkerService.dotnet add AspireSample.AppHost/AspireSample.AppHost.csproj reference AspireSample.WorkerService/AspireSample.WorkerService.csproj
Tambahkan baris kode berikut ke file Program.cs di proyek AspireSample.AppHost sebelum panggilan ke
builder.Build().Run();
:builder.AddProject<Projects.AspireSample_WorkerService>( "aspiresample-workerservice");
Struktur solusi yang lengkap harus menyerupai berikut, dengan asumsi direktori tingkat atas diberi nama aspire-pesan:
└───📂 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
Menambahkan integrasi .NET.NET Aspire ke API
Tambahkan integrasi .NET Aspire Azure Service Bus ke aplikasi AspireSample.ApiService Anda:
Di
Solution Explorer, klik dua kali file AspireSample.ApiService.csproj untuk membuka file XML-nya.Tambahkan item
<PackageReference>
berikut ke elemen<ItemGroup>
:<ItemGroup> <PackageReference Include="Aspire.Azure.Messaging.ServiceBus" Version="9.1.0" /> </ItemGroup>
dotnet add package Aspire.Azure.Messaging.ServiceBus
Dalam file Program.cs dari proyek AspireSample.ApiService, tambahkan panggilan ke metode ekstensi AddAzureServiceBusClient
segera setelah panggilan yang ada ke AddServiceDefaults
:
// Add service defaults & Aspire integrations.
builder.AddServiceDefaults();
builder.AddAzureServiceBusClient("serviceBusConnection");
Untuk informasi selengkapnya, lihat AddAzureServiceBusClient.
Metode ini menyelesaikan tugas-tugas berikut:
- Mendaftarkan ServiceBusClient dengan kontainer DI untuk menyambungkan ke Azure Service Bus.
- Secara otomatis mengaktifkan pemeriksaan kesehatan, pengelogan, dan telemetri yang sesuai untuk masing-masing layanan.
Dalam file appsettings.json proyek yang sama, tambahkan informasi koneksi yang sesuai:
-
Tanpa Kata Sandi (Disarankan) - String Koneksi
{
// Existing configuration is omitted for brevity.
"ConnectionStrings": {
"serviceBusConnection": "{your_namespace}.servicebus.windows.net"
}
}
Nota
Pastikan untuk mengganti
Membuat titik akhir API
API harus menyediakan endpoint untuk menerima data, menerbitkannya ke topik Service Bus, dan menyiarkannya kepada pelanggan. Tambahkan titik akhir berikut ke proyek AspireSample.ApiService untuk mengirim pesan ke topik Service Bus. Ganti semua konten file Program.cs dengan kode C# berikut:
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();
Menambahkan integrasi .NET Aspire ke Worker Service
Tambahkan integrasi
Dalam file Program.cs proyek AspireSample.WorkerService, ganti kode yang ada dengan yang berikut ini:
using AspireSample.WorkerService;
var builder = Host.CreateApplicationBuilder(args);
builder.AddAzureServiceBusClient("serviceBusConnection");
builder.Services.AddHostedService<Worker>();
var host = builder.Build();
host.Run();
Metode AddAzureServiceBusClient
menyelesaikan tugas-tugas berikut:
- Mendaftarkan ServiceBusClient dengan kontainer DI untuk menyambungkan ke Azure Service Bus.
- Secara otomatis mengaktifkan pemeriksaan kesehatan, pengelogan, dan telemetri yang sesuai untuk masing-masing layanan.
Dalam file appsettings.json dari proyek AspireSample.WorkerService, tambahkan informasi koneksi yang sesuai:
-
Tanpa Kata Sandi (Disarankan) - String Koneksi
{
// Existing configuration is omitted for brevity.
"ConnectionStrings": {
"serviceBusConnection": "{your_namespace}.servicebus.windows.net"
}
}
Nota
Pastikan untuk mengganti
Memproses pesan dari pelanggan
Saat pesan baru ditempatkan pada antrean messages
, layanan pekerja harus mengambil, memproses, dan menghapus pesan. Perbarui kelas Worker.cs agar sesuai dengan kode berikut:
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;
}
}
Menjalankan dan menguji aplikasi secara lokal
Aplikasi sampel sekarang siap untuk pengujian. Verifikasi bahwa data yang dikirimkan ke API dikirim ke topik Azure Service Bus dan digunakan oleh layanan pekerja pelanggan:
- Luncurkan proyek .NET.NET Aspire dengan memilih tombol debugging Mulai, atau dengan menekan F5. Aplikasi dasbor .NET.NET Aspire harus terbuka di browser.
- Luncurkan proyek .NET.NET Aspire dengan memilih tombol debugging Mulai, atau dengan menekan F5. Aplikasi dasbor .NET.NET Aspire harus terbuka di browser.
- Luncurkan proyek .NET.NET Aspire dengan menjalankan
dotnet run --project AspireSample.AppHost
. Aplikasi dasbor .NET.NET Aspire harus terbuka di browser.
Pada halaman sumber daya, di baris apiservice, temukan tautan di Endpoints yang membuka titik akhir
weatherforecast
. Perhatikan nomor port HTTPS.Di dasbor .NET.NET Aspire, pergi ke log untuk proyek aspiresample-workerservice.
Di jendela terminal, gunakan perintah
curl
untuk mengirim pesan pengujian ke API:curl -X POST -H "Content-Type: application/json" https://localhost:{port}/notify?message=hello%20aspire
Pastikan untuk mengganti {port} dengan nomor port yang Anda catat sebelumnya.
Beralih kembali ke log aspiresample-workerservice. Anda akan melihat pesan pengujian yang dicetak di log output.
Selamat! Anda membuat dan mengonfigurasi API ASP.NET Core yang tersambung ke Azure Service Bus menggunakan integrasi Aspire.
Membersihkan sumber daya
Jalankan perintah CLI Azure berikut untuk menghapus grup sumber daya saat Anda tidak lagi memerlukan sumber daya Azure yang Anda buat. Menghapus grup sumber daya juga menghapus sumber daya yang terkandung di dalamnya.
az group delete --name <your-resource-group-name>
Untuk informasi selengkapnya, lihat Membersihkan sumber daya di Azure.
.NET Aspire