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 menyediakan perpesanan cloud antar komponen aplikasi. Dalam merancang aplikasi untuk menskalakan, komponen aplikasi sering dipisah sehingga mereka dapat menskalakan secara mandiri. Penyimpanan antrean menyediakan olahpesan asinkron untuk komunikasi antara komponen aplikasi, apakah berjalan di cloud, di desktop, di server lokal, atau di perangkat seluler. Penyimpanan antrean juga mendukung pengelolaan tugas asinkron dan pembangunan alur kerja proses.
Tentang tutorial ini
Tutorial ini menunjukkan cara menulis kode F# untuk beberapa tugas umum menggunakan Azure Queue Storage. Tugas yang dibahas meliputi membuat dan menghapus antrean serta menambah, membaca, dan menghapus pesan antrean.
Untuk gambaran umum konseptual penyimpanan antrean, lihat panduan .NET untuk penyimpanan antrean. Untuk memudahkan, tutorial ini menggunakan string koneksi untuk mengautentikasi dengan Azure. Untuk keamanan yang optimal, Anda harus menggunakan ID Microsoft Entra dengan identitas terkelola.
Prasyarat
Untuk menggunakan panduan ini, Anda harus membuat akun penyimpanan Azure terlebih dahulu. Anda juga akan membutuhkan kunci akses penyimpanan untuk akun ini.
Membuat sebuah skrip F# dan memulai F# interactive
Sampel dalam artikel ini dapat digunakan dalam aplikasi F# atau skrip F#. Untuk membuat skrip F#, buat sebuah file dengan ekstensi .fsx, misalnya queues.fsx, di lingkungan pengembangan F#.
Cara menjalankan skrip
F# Interaktif, dotnet fsi, dapat diluncurkan secara interaktif, atau dapat diluncurkan dari baris perintah untuk menjalankan sebuah skrip. Sintaks baris perintah adalah
> dotnet fsi [options] [ script-file [arguments] ]
Tambahkan paket dalam sebuah skrip
Selanjutnya, gunakan #rnuget:package name untuk menginstal Azure.Storage.Queues paket dan open namespace. Misalnya
> #r "nuget: Azure.Storage.Queues"
open Azure.Storage.Queues
Menambahkan deklarasi namespace
Tambahkan open pernyataan berikut ke bagian atas queues.fsx file:
open Azure.Storage.Queues // Namespace for Queue storage types
open System
open System.Text
Dapatkan string koneksi Anda
Anda akan membutuhkan string koneksi Azure Storage untuk tutorial ini. Untuk informasi selengkapnya mengenai string koneksi, lihat Mengonfigurasi String Koneksi Penyimpanan.
Untuk tutorial, masukkan string koneksi Anda di skrip, seperti berikut ini:
let storageConnString = "..." // fill this in from your storage account
Buat klien layanan antrean
Kelas QueueClient memungkinkan Anda untuk mengambil antrean yang disimpan di penyimpanan Antrean. Berikut salah satu cara untuk membuat klien:
let queueClient = QueueClient(storageConnString, "myqueue")
Sekarang Anda siap untuk menulis kode yang membaca data dari dan menulis data ke penyimpanan Antrean.
Membuat antrean
Contoh ini menunjukkan cara membuat antrean jika belum ada:
queueClient.CreateIfNotExists()
Sisipkan pesan ke antrean
Untuk menyisipkan pesan ke dalam antrean yang sudah ada, pertama-tama buat sebuah Pesan baru. Selanjutnya, panggil metode SendMessage. Sebuah pesan dapat dibuat dari string (dalam format UTF-8) atau larik byte, seperti ini:
queueClient.SendMessage("Hello, World") // Insert a String message into a queue
queueClient.SendMessage(BinaryData.FromBytes(Encoding.UTF8.GetBytes("Hello, World"))) // Insert a BinaryData message into a queue
Intip pesan berikutnya
Anda bisa mengintip pesan di bagian depan antrean tanpa menghapusnya dari antrean dengan memanggil metode PeekMessage.
let peekedMessage = queueClient.PeekMessage()
let messageContents = peekedMessage.Value.Body.ToString()
Dapatkan pesan berikutnya untuk diproses
Anda bisa mengambil pesan di bagian depan antrean untuk diproses dengan memanggil metode ReceiveMessage.
let updateMessage = queueClient.ReceiveMessage().Value
Anda kemudian menunjukkan keberhasilan pemrosesan pesan dengan menggunakan DeleteMessage.
Ubah konten pesan yang diantrekan
Anda bisa mengubah konten pesan yang diambil langsung dalam antrean. Jika pesan itu mewakili tugas kerja, Anda bisa menggunakan fitur ini untuk memperbarui status tugas kerja. Kode berikut memperbarui pesan antrean dengan konten baru, dan mengatur batas waktu visibilitas untuk memperpanjang 60 detik lagi. Ini menyimpan status pekerjaan yang terkait dengan pesan, dan memberi klien waktu satu menit lagi untuk terus mengerjakan pesan. Anda bisa menggunakan teknik ini untuk melacak alur kerja multilangkah pada pesan antrean, tanpa harus memulai dari awal apabila langkah pemrosesan gagal karena kegagalan perangkat keras atau perangkat lunak. Biasanya, Anda akan menyimpan jumlah coba ulang juga, dan jika pesan dicoba lebih dari jumlah kali tertentu, Anda akan menghapusnya. Ini melindungi terhadap pesan yang memicu kesalahan aplikasi setiap kali diproses.
queueClient.UpdateMessage(
updateMessage.MessageId,
updateMessage.PopReceipt,
"Updated contents.",
TimeSpan.FromSeconds(60.0))
Hapus pesan berikutnya dari antrean
Kode Anda akan menghapus pesan dari antrean dalam dua langkah. Saat Anda memanggil ReceiveMessage, Anda mendapatkan pesan berikutnya di antrean. Pesan yang dikembalikan dari ReceiveMessage menjadi tidak terlihat oleh kode lain yang membaca pesan dari antrean ini. Secara default, pesan ini tetap tidak terlihat selama 30 detik. Untuk menyelesaikan menghapus pesan dari antrean, Anda juga harus memanggil DeleteMessage. Adanya proses dua langkah menghapus pesan ini memastikan bahwa jika kode Anda gagal memproses pesan karena kegagalan perangkat keras atau perangkat lunak, instans lain dari kode Anda bisa mendapat pesan yang sama dan mencoba lagi. Kode Anda memanggil DeleteMessage tepat setelah pesan telah diproses.
Semua metode Antrean yang telah kami perlihatkan sejauh ini memiliki Async alternatif.
let deleteMessage = queueClient.ReceiveMessage().Value
queueClient.DeleteMessage(deleteMessage.MessageId, deleteMessage.PopReceipt)
Menggunakan alur kerja Asinkron dengan API penyimpanan Antrean umum
Contoh ini menunjukkan cara menggunakan alur kerja asinkron dengan API penyimpanan Antrean umum.
async {
let! exists = queueClient.CreateIfNotExistsAsync() |> Async.AwaitTask
let! delAsyncMessage = queueClient.ReceiveMessageAsync() |> Async.AwaitTask
// ... process the message here ...
// Now indicate successful processing:
queueClient.DeleteMessageAsync(delAsyncMessage.Value.MessageId, delAsyncMessage.Value.PopReceipt) |> Async.AwaitTask
}
Gunakan opsi tambahan untuk mengeluarkan pesan dari antrean
Ada dua cara untuk mengkustomisasi pengambilan pesan dari antrean.
Pertama, Anda bisa mendapatkan sejumlah pesan (hingga 32). Kedua, Anda dapat mengatur batas waktu tidak terlihat yang lebih lama atau lebih pendek, yang memungkinkan kode Anda lebih banyak atau lebih sedikit waktu untuk memproses setiap pesan sepenuhnya. Contoh kode berikut ini menggunakan ReceiveMessages untuk mendapatkan 20 pesan dalam satu panggilan lalu memproses setiap pesan. Metode ini juga mengatur batas waktu invisibilitas menjadi lima menit untuk setiap pesan. Perhatikan bahwa 5 menit dimulai untuk semua pesan pada waktu yang bersamaan, jadi setelah 5 menit berlalu sejak panggilan ke ReceiveMessages, pesan apa pun yang belum dihapus akan terlihat lagi.
for dequeueMessage in queueClient.ReceiveMessages(20, Nullable(TimeSpan.FromMinutes(5.))).Value do
// Process the message here.
queueClient.DeleteMessage(dequeueMessage.MessageId, dequeueMessage.PopReceipt)
Dapatkan panjang antrean
Anda bisa mendapat estimasi jumlah pesan dalam antrean. Metode GetProperties meminta layanan antrian untuk mengambil atribut antrean, termasuk jumlah pesan. Properti ApproximateMessagesCount mengembalikan nilai terakhir yang diambil oleh metode GetProperties.
let properties = queueClient.GetProperties().Value
let count = properties.ApproximateMessagesCount
Menghapus antrean
Untuk menghapus antrean dan semua pesan yang terkandung di dalamnya, panggil metode Delete pada objek antrean.
queueClient.DeleteIfExists()
Catatan
Jika Anda bermigrasi dari pustaka lama, mereka mengkodekan pesan berdasarkan Base64 secara default, tetapi pustaka baru tidak karena lebih berkinerja. Untuk informasi mengenai cara pengaturan pengodean, lihat MessageEncoding.