Bagikan melalui


Melakukan prefetch pesan Azure Service Bus

Ketika Anda mengaktifkan fitur Prefetch untuk salah satu klien Azure Service Bus resmi, penerima memperoleh lebih banyak pesan daripada apa yang awalnya diminta aplikasi, hingga jumlah prefetch yang ditentukan. Saat pesan dikembalikan ke aplikasi, klien memperoleh lebih banyak pesan di latar belakang, untuk mengisi buffer prefetch.

Aktifkan Prefetch

Untuk mengaktifkan fitur Prefetch, atur jumlah prefetch dari antrean atau klien langganan ke angka yang lebih besar dari nol. Mengatur nilai menjadi nol menonaktifkan prefetch.

Catatan

Java Script SDK tidak mendukung fitur Prefetch.

Sementara pesan tersedia di buffer prefetch, setiap panggilan yang diterima berikutnya segera dipenuhi dari buffer. Buffer diisi ulang di latar belakang saat ruang menjadi tersedia. Jika tidak ada pesan yang tersedia untuk pengiriman, operasi penerima mengosongkan buffer dan kemudian menunggu atau memblokir, seperti yang diharapkan.

Mengapa Prefetch bukan opsi default?

Prefetch mempercepat alur pesan dengan meminta pesan yang tersedia untuk pengambilan lokal sebelum aplikasi memintanya. Perolehan throughput ini adalah hasil dari trade-off yang harus dilakukan oleh penulis aplikasi secara eksplisit.

Saat Anda menggunakan mode terima dan hapus , semua pesan yang diperoleh ke dalam buffer prefetch tidak lagi tersedia dalam antrean. Pesan hanya tetap berada di buffer prefetch dalam memori sampai diterima ke dalam aplikasi. Jika aplikasi berakhir sebelum pesan diterima ke dalam aplikasi, pesan tersebut tidak dapat dipulihkan (hilang).

Saat Anda menggunakan mode penerimaan kunci intip, pesan yang diambil ke buffer prefetch diperoleh ke dalam buffer dalam keadaan terkunci. Pesan memiliki jam waktu habis untuk kunci berdetak. Jika buffer prefetch besar, dan pemrosesan membutuhkan waktu begitu lama sehingga kunci pesan kedaluwarsa saat tetap berada di buffer prefetch atau meskipun saat aplikasi sedang memproses pesan, mungkin ada beberapa peristiwa membingungkan untuk ditangani aplikasi. Aplikasi mungkin memperoleh pesan dengan kunci kedaluwarsa atau segera kedaluwarsa. Jika demikian, aplikasi mungkin memproses pesan, tetapi kemudian menemukan bahwa ia tidak dapat menyelesaikan pesan karena kedaluwarsa kunci. Aplikasi dapat memeriksa LockedUntilUtc properti (yang tunduk pada condong jam antara broker dan jam komputer lokal).

Jika kunci pesan telah kedaluwarsa, aplikasi harus mengabaikan pesan, dan tidak boleh melakukan panggilan API apa pun pada pesan. Jika pesan tidak kedaluwarsa tetapi kedaluwarsa akan segera terjadi, kunci dapat diperbarui dan diperpanjang oleh periode kunci default lainnya. Jika kunci diam-diam kedaluwarsa di buffer prefetch, pesan diperlakukan sebagai ditinggalkan dan kembali tersedia untuk diambil dari antrean. Ini dapat menyebabkan pesan diambil ke dalam buffer prefetch dan ditempatkan di akhir. Jika buffer prefetch biasanya tidak dapat dikerjakan selama kedaluwarsa pesan, pesan berulang kali diasingkan tetapi tidak pernah dikirimkan secara efektif dalam status dapat digunakan (dikunci secara valid), dan akhirnya dipindahkan ke antrean surat gagal setelah jumlah pengiriman maksimum terlampaui.

Jika aplikasi secara eksplisit meninggalkan pesan, pesan mungkin lagi tersedia untuk diambil dari antrean. Ketika prefetch diaktifkan, pesan diambil ke buffer prefetch lagi dan ditempatkan di akhir. Karena pesan dari buffer prefetch dikosongkan dalam urutan first-in first-out (FIFO), aplikasi mungkin menerima pesan di luar urutan. Misalnya, aplikasi mungkin menerima pesan dengan ID 2 dan kemudian pesan dengan ID 1 (yang ditinggalkan sebelumnya) dari buffer.

Jika Anda memerlukan keandalan tingkat tinggi untuk pemrosesan pesan, dan pemrosesan membutuhkan pekerjaan dan waktu yang signifikan, sebaiknya gunakan fitur Prefetch secara konservatif, atau tidak sama sekali. Jika Anda membutuhkan throughput tinggi dan pemrosesan pesan umumnya murah, prefetch menghasilkan manfaat throughput yang signifikan.

Jumlah prefetch maksimum dan durasi kunci yang dikonfigurasi pada antrean atau langganan harus seimbang sehingga batas waktu penguncian setidaknya melebihi waktu pemrosesan pesan kumulatif yang diharapkan untuk ukuran maksimum buffer prefetch, ditambah satu pesan. Pada saat yang sama, batas waktu penguncian tidak boleh begitu lama sehingga pesan dapat melebihi waktu maksimum mereka untuk aktif ketika mereka secara tidak sengaja tidak berfungsi, dan sangat membutuhkan kunci mereka untuk kedaluwarsa sebelum digadaikan.

Langkah berikutnya

Cobalah sampel dalam bahasa pilihan Anda untuk menjelajahi fitur Azure Service Bus.

Sampel untuk pustaka klien .NET dan Java yang lebih lama:

Pada 30 September 2026, kami akan menghentikan pustaka Azure Bus Layanan SDK WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus, dan com.microsoft.azure.servicebus, yang tidak sesuai dengan panduan Azure SDK. Kami juga akan mengakhiri dukungan protokol SBMP, sehingga Anda tidak akan lagi dapat menggunakan protokol ini setelah 30 September 2026. Migrasikan ke pustaka Azure SDK terbaru, yang menawarkan pembaruan keamanan penting dan kemampuan yang ditingkatkan, sebelum tanggal tersebut.

Meskipun pustaka lama masih dapat digunakan melebihi 30 September 2026, pustaka tersebut tidak akan lagi menerima dukungan dan pembaruan resmi dari Microsoft. Untuk informasi selengkapnya, lihat pengumuman penghentian dukungan.