Bagikan melalui


Melakukan prefetch pesan Azure Service Bus

Fitur Prefetch mengambil pesan di latar belakang ke buffer prefetch lokal hingga jumlah prefetch. Pesan disajikan dari buffer. Seperti yang terjadi, ruang dibebaskan di buffer, dan penerima akan mengambil lebih banyak di latar belakang.

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. Jika ada pesan dalam buffer prefetch setelah fitur dinonaktifkan, aplikasi menerima pesan tersebut dari buffer terlebih dahulu, lalu masuk ke layanan.

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.

Penting untuk dicatat yang PrefetchCount menentukan jumlah maksimum pesan yang dapat ada di buffer lokal kapan saja. Ini juga berarti bahwa ia bertindak sebagai batas atas yang ketat tentang berapa banyak pesan yang dapat diproses secara bersamaan. Jika MaxConcurrentCalls diatur lebih tinggi dari PrefetchCount, prosesor tidak akan dapat menggunakan semua penangan pesan bersamaan, karena hanya hingga PrefetchCount pesan yang dapat aktif dalam memori sekaligus.

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. Timer kunci dimulai dari saat pesan diambil sebelumnya ke dalam buffer. 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, tetapi perlu diingat bahwa ada ke condong jam antara broker dan jam komputer lokal.

Jika kunci diam-diam kedaluwarsa di buffer prefetch, pesan diperlakukan sebagai ditinggalkan dan kembali tersedia untuk diambil dari antrean. Kemudian pesan akan diambil lagi ke buffer prefetch dan ditempatkan di akhir Jika buffer prefetch biasanya tidak dapat dikerjakan selama pesan kedaluwarsa, pesan berulang kali diambil sebelumnya tetapi tidak pernah dikirim secara efektif dalam keadaan dapat digunakan (terkunci secara valid), dan akhirnya dipindahkan ke antrean surat mati 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, durasi kunci seharusnya tidak begitu lama sehingga pesan dapat melebihi waktu maksimum mereka untuk hidup saat dikunci, karena ini berarti mereka dihapus jika tidak dapat diselesaikan ketika mereka diambil sebelumnya.

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.