Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Azure Queue Storage mengimplementasikan antrean berbasis cloud untuk memungkinkan komunikasi antar komponen aplikasi terdistribusi. Setiap antrean menyimpan daftar pesan yang dapat ditambahkan oleh komponen pengirim dan diproses oleh komponen penerima. Dengan antrean, aplikasi Anda dapat segera diskalakan untuk memenuhi permintaan. Artikel ini memperlihatkan langkah-langkah dasar untuk bekerja dengan antrean Azure Queue Storage.
Dalam tutorial ini, Anda akan mempelajari cara:
- Buat akun Azure Storage
- Membuat aplikasi
- Menambahkan pustaka klien Azure
- Menambahkan dukungan untuk kode asinkron
- Membuat antrean
- Menyisipkan pesan ke dalam antrean
- Menghapus pesan
- Menghapus antrean kosong
- Memeriksa argumen baris perintah
- Buat dan jalankan aplikasi
Prasyarat
- Dapatkan salinan gratis editor Visual Studio Code lintas platform Anda.
- Unduh dan instal .NET Core SDK versi 3.1 atau yang lebih baru.
- Jika Anda tidak memiliki langganan Azure aktif, buat akun gratis sebelum memulai.
Buat akun Azure Storage
Pertama, buat akun Azure Storage.
Untuk panduan langkah demi langkah untuk membuat akun penyimpanan, lihat Membuat akun penyimpanan. Ini adalah langkah terpisah yang Anda lakukan setelah membuat akun Azure gratis dalam prasyarat.
Pastikan akun pengguna Anda telah diberi peran Kontributor Data Antrean Penyimpanan, yang dilingkupkan ke akun penyimpanan, grup sumber daya induk, atau langganan. Lihat Mengautentikasi ke Azure.
Membuat aplikasi
Buat aplikasi .NET Core bernama QueueApp. Sederhananya, aplikasi ini akan mengirim dan menerima pesan melalui antrean.
Di jendela konsol (seperti cmd, PowerShell, atau Azure CLI), gunakan perintah
dotnet newuntuk membuat aplikasi konsol baru bernamaQueueApp. Perintah ini membuat proyek C# "hello world" sederhana dengan satu file sumber bernamaProgram.cs.dotnet new console -n QueueAppBeralih ke folder
QueueAppyang baru dibuat dan buat aplikasi untuk memeriksa bahwa semuanya berjalan dengan baik.cd QueueAppdotnet buildAnda akan melihat hasil yang mirip dengan output berikut:
C:\Tutorials>dotnet new console -n QueueApp The template "Console Application" was created successfully. Processing post-creation actions... Running 'dotnet restore' on QueueApp\QueueApp.csproj... Restore completed in 155.63 ms for C:\Tutorials\QueueApp\QueueApp.csproj. Restore succeeded. C:\Tutorials>cd QueueApp C:\Tutorials\QueueApp>dotnet build Microsoft (R) Build Engine version 16.0.450+ga8dc7f1d34 for .NET Core Copyright (C) Microsoft Corporation. All rights reserved. Restore completed in 40.87 ms for C:\Tutorials\QueueApp\QueueApp.csproj. QueueApp -> C:\Tutorials\QueueApp\bin\Debug\netcoreapp3.1\QueueApp.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.40 C:\Tutorials\QueueApp>_
Menambahkan pustaka klien Azure
Tambahkan pustaka klien Azure Storage ke proyek dengan menggunakan perintah
dotnet add package.Jalankan perintah berikut dari folder proyek di jendela konsol.
dotnet add package Azure.Storage.Queues
Menambahkan menggunakan pernyataan
Dari baris perintah di direktori proyek, ketik
code .untuk membuka Visual Studio Code di direktori saat ini. Tetap buka jendela baris perintah. Akan ada lebih banyak perintah untuk dijalankan nanti. Jika Anda diminta untuk menambahkan aset C# yang diperlukan untuk membuat dan men-debug, klik tombol Ya.Buka file sumber
Program.csdan tambahkan namespace berikut tepat setelah pernyataanusing System;. Aplikasi ini menggunakan jenis dari namespace tersebut untuk terhubung ke Azure Storage dan bekerja dengan antrean.using System.Threading.Tasks; using Azure.Storage.Queues; using Azure.Storage.Queues.Models;Simpan file
Program.cs.
Menambahkan dukungan untuk kode asinkron
Karena aplikasi menggunakan sumber daya cloud, kode berjalan secara asinkron.
Perbarui metode
Mainuntuk menjalankan secara asinkron. Gantivoiddenganasync Tasknilai yang dikembalikan.static async Task Main(string[] args)Simpan file
Program.cs.
Membuat antrean
Sebelum melakukan panggilan apa pun ke Api Azure, Anda harus memastikan bahwa Anda diautentikasi dengan akun Microsoft Entra yang sama dengan yang Anda tetapkan perannya. Setelah diautentikasi, Anda dapat membuat dan mengotorisasi QueueClient objek dengan menggunakan DefaultAzureCredential untuk mengakses data antrean di akun penyimpanan.
DefaultAzureCredential secara otomatis menemukan dan menggunakan akun yang Anda masuki. Untuk mempelajari cara masuk lalu membuat QueueClient objek, lihat Mengotorisasi akses dan membuat objek klien.
Menyisipkan pesan ke dalam antrean
Buat metode baru untuk mengirim pesan ke dalam antrean.
Tambahkan metode
InsertMessageAsyncberikut ke kelasProgram.Metode ini melewati referensi antrean. Antrean baru dibuat dengan memanggil
CreateIfNotExistsAsync, jika belum ada. Kemudian, perintah tersebut menambahnewMessageke antrean dengan memanggilSendMessageAsync.static async Task InsertMessageAsync(QueueClient theQueue, string newMessage) { if (null != await theQueue.CreateIfNotExistsAsync()) { Console.WriteLine("The queue was created."); } await theQueue.SendMessageAsync(newMessage); }Opsional: Secara default, maksimum waktu hidup pesan diatur ke tujuh hari. Anda dapat menentukan angka positif apa pun untuk waktu hidup pesan. Cuplikan kode berikut menambahkan pesan yang tidak pernah kedaluwarsa.
Untuk menambahkan pesan yang tidak kedaluwarsa, gunakan
Timespan.FromSeconds(-1)dalam panggilan Anda keSendMessageAsync.await theQueue.SendMessageAsync(newMessage, default, TimeSpan.FromSeconds(-1), default);Simpan file.
Pesan antrean harus dalam format yang kompatibel dengan permintaan XML menggunakan pengodean UTF-8. Pesan dapat berukuran hingga 64 KB. Jika pesan berisi data biner, Base64-encode pesan tersebut.
Menghapus pesan
Buat metode baru untuk mengambil pesan dari antrean. Setelah pesan berhasil diterima, penting untuk menghapusnya dari antrean sehingga tidak diproses lebih dari sekali.
Tambahkan metode baru yang dipanggil
RetrieveNextMessageAsyncke kelasProgramAnda.Metode ini menerima pesan dari antrean dengan memanggil
ReceiveMessagesAsync, meneruskan1di parameter pertama untuk hanya mengambil pesan berikutnya dalam antrean. Setelah pesan diterima, hapus dari antrean dengan memanggilDeleteMessageAsync.Ketika pesan dikirim ke antrean dengan versi SDK sebelum v12, pesan secara otomatis dikodekan Base64. Dimulai dengan v12, fungsionalitas tersebut dihapus. Saat Anda mengambil pesan dengan menggunakan v12 SDK, pesan tidak secara otomatis didekodekan Base64. Anda harus secara eksplisit mendekode-Base64 konten sendiri.
static async Task<string> RetrieveNextMessageAsync(QueueClient theQueue) { if (await theQueue.ExistsAsync()) { QueueProperties properties = await theQueue.GetPropertiesAsync(); if (properties.ApproximateMessagesCount > 0) { QueueMessage[] retrievedMessage = await theQueue.ReceiveMessagesAsync(1); string theMessage = retrievedMessage[0].Body.ToString(); await theQueue.DeleteMessageAsync(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt); return theMessage; } return null; } return null; }Simpan file.
Menghapus antrean kosong
Ini adalah praktik terbaik di akhir proyek untuk mengidentifikasi apakah Anda masih membutuhkan sumber daya yang Anda buat. Sumber daya yang dibiarkan berjalan dapat menghabiskan uang Anda. Jika antrean ada tetapi kosong, tanyakan kepada pengguna apakah mereka ingin menghapusnya.
Perluas metode
RetrieveNextMessageAsyncuntuk menyertakan perintah untuk menghapus antrean kosong.static async Task<string> RetrieveNextMessageAsync(QueueClient theQueue) { if (await theQueue.ExistsAsync()) { QueueProperties properties = await theQueue.GetPropertiesAsync(); if (properties.ApproximateMessagesCount > 0) { QueueMessage[] retrievedMessage = await theQueue.ReceiveMessagesAsync(1); string theMessage = retrievedMessage[0].Body.ToString(); await theQueue.DeleteMessageAsync(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt); return theMessage; } else { Console.Write("The queue is empty. Attempt to delete it? (Y/N) "); string response = Console.ReadLine(); if (response.ToUpper() == "Y") { await theQueue.DeleteIfExistsAsync(); return "The queue was deleted."; } else { return "The queue was not deleted."; } } } else { return "The queue does not exist. Add a message to the command line to create the queue and store the message."; } }Simpan file.
Memeriksa argumen baris perintah
Jika ada argumen baris perintah yang diteruskan ke aplikasi, asumsikan argumen tersebut adalah pesan yang akan ditambahkan ke antrean. Gabungkan argumen untuk membuat string. Tambahkan string ini ke antrean pesan dengan memanggil metode InsertMessageAsync yang kami tambahkan sebelumnya.
Jika tidak ada argumen baris perintah, coba operasi ambil. Panggil metode RetrieveNextMessageAsync untuk mengambil pesan berikutnya dalam antrean.
Terakhir, tunggu input pengguna sebelum keluar dengan memanggil Console.ReadLine.
Perluas metode
Mainuntuk memeriksa argumen baris perintah dan menunggu input pengguna. Dalam cuplikan kode di bawah ini, pastikan untuk mengganti{storageAccountName}tempat penampung dengan nama akun penyimpanan Anda.static async Task Main(string[] args) { QueueClient queue = new QueueClient( new Uri($"https://{storageAccountName}.queue.core.windows.net/mystoragequeue"), new DefaultAzureCredential()); if (args.Length > 0) { string value = String.Join(" ", args); await InsertMessageAsync(queue, value); Console.WriteLine($"Sent: {value}"); } else { string value = await RetrieveNextMessageAsync(queue); Console.WriteLine($"Received: {value}"); } Console.Write("Press Enter..."); Console.ReadLine(); }Simpan file.
Kode lengkap
Berikut adalah daftar kode lengkap untuk proyek ini.
using System;
using System.Threading.Tasks;
using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;
using Azure.Identity;
namespace QueueApp
{
class Program
{
static async Task Main(string[] args)
{
QueueClient queue = new QueueClient(
new Uri($"https://{storageAccountName}.queue.core.windows.net/mystoragequeue"),
new DefaultAzureCredential());
if (args.Length > 0)
{
string value = String.Join(" ", args);
await InsertMessageAsync(queue, value);
Console.WriteLine($"Sent: {value}");
}
else
{
string value = await RetrieveNextMessageAsync(queue);
Console.WriteLine($"Received: {value}");
}
Console.Write("Press Enter...");
Console.ReadLine();
}
static async Task InsertMessageAsync(QueueClient theQueue, string newMessage)
{
if (null != await theQueue.CreateIfNotExistsAsync())
{
Console.WriteLine("The queue was created.");
}
await theQueue.SendMessageAsync(newMessage);
}
static async Task<string> RetrieveNextMessageAsync(QueueClient theQueue)
{
if (await theQueue.ExistsAsync())
{
QueueProperties properties = await theQueue.GetPropertiesAsync();
if (properties.ApproximateMessagesCount > 0)
{
QueueMessage[] retrievedMessage = await theQueue.ReceiveMessagesAsync(1);
string theMessage = retrievedMessage[0].Body.ToString();
await theQueue.DeleteMessageAsync(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt);
return theMessage;
}
else
{
Console.Write("The queue is empty. Attempt to delete it? (Y/N) ");
string response = Console.ReadLine();
if (response.ToUpper() == "Y")
{
await theQueue.DeleteIfExistsAsync();
return "The queue was deleted.";
}
else
{
return "The queue was not deleted.";
}
}
}
else
{
return "The queue does not exist. Add a message to the command line to create the queue and store the message.";
}
}
}
}
Buat dan jalankan aplikasi
Dari baris perintah di direktori proyek, jalankan perintah dotnet berikut untuk membangun proyek.
dotnet buildSetelah proyek berhasil dibangun, jalankan perintah berikut untuk menambahkan pesan pertama ke antrean.
dotnet run First queue messageAnda akan melihat output berikut:
C:\Tutorials\QueueApp>dotnet run First queue message The queue was created. Sent: First queue message Press Enter..._Jalankan aplikasi tanpa argumen baris perintah untuk menerima dan menghapus pesan pertama dalam antrean.
dotnet runLanjutkan menjalankan aplikasi hingga semua pesan dihapus. Jika Anda menjalankannya sekali lagi, Anda akan mendapatkan pesan bahwa antrean kosong dan perintah untuk menghapus antrean.
C:\Tutorials\QueueApp>dotnet run First queue message The queue was created. Sent: First queue message Press Enter... C:\Tutorials\QueueApp>dotnet run Second queue message Sent: Second queue message Press Enter... C:\Tutorials\QueueApp>dotnet run Third queue message Sent: Third queue message Press Enter... C:\Tutorials\QueueApp>dotnet run Received: First queue message Press Enter... C:\Tutorials\QueueApp>dotnet run Received: Second queue message Press Enter... C:\Tutorials\QueueApp>dotnet run Received: Third queue message Press Enter... C:\Tutorials\QueueApp>dotnet run The queue is empty. Attempt to delete it? (Y/N) Y Received: The queue was deleted. Press Enter... C:\Tutorials\QueueApp>_
Langkah berikutnya
Dalam tutorial ini, Anda mempelajari cara:
- Membuat antrean
- Menambahkan dan menghapus pesan dari antrean
- Menghapus antrean Azure Queue Storage
Lihat mulai cepat Azure Queue Storage untuk informasi selengkapnya.
- Antrean mulai cepat untuk .NET
- Antrean mulai cepat untuk Java
- Antrean mulai cepat untuk Python
- Antrean mulai cepat untuk JavaScript
Untuk sampel kode terkait menggunakan .NET versi 11.x SDK yang tidak digunakan lagi, lihat Sampel kode menggunakan .NET versi 11.x.