Deteksi duplikat
Jika aplikasi gagal karena kesalahan fatal segera setelah mengirim pesan, dan instans aplikasi yang dimulai ulang secara keliru percaya bahwa pengiriman pesan sebelumnya tidak terjadi, pengiriman berikutnya menyebabkan pesan yang sama muncul di sistem dua kali.
Dimungkinkan juga kesalahan di tingkat klien atau jaringan terjadi beberapa saat sebelumnya, dan agar pesan terkirim dilakukan ke dalam antrean, dengan pengakuan tidak berhasil dikembalikan ke klien. Skenario ini membuat klien ragu tentang hasil operasi pengiriman.
Deteksi duplikat mengambil keraguan dari situasi ini dengan memungkinkan pengirim mengirim ulang pesan yang sama, dan antrean atau topik membuang salinan duplikat apa pun.
Catatan
Tingkat dasar Service Bus tidak mendukung deteksi transaksi. Tingkat standar dan premium mendukung deteksi duplikat. Untuk perbedaan antara tingkatan ini, lihat Harga Service Bus.
Cara kerjanya
Mengaktifkan deteksi duplikat membantu melacak MessageId
yang dikontrol aplikasi dari semua pesan yang dikirim ke dalam antrean atau topik selama jendela waktu yang ditentukan. Jika ada pesan baru yang dikirim dengan MessageId
yang dicatat selama jendela waktu, pesan dilaporkan sebagai diterima (operasi pengiriman berhasil), tetapi pesan yang baru dikirim langsung diabaikan dan dihilangkan. Tidak ada bagian lain dari pesan selain MessageId
yang dipertimbangkan.
Kontrol aplikasi pengidentifikasi sangat penting, karena hanya yang memungkinkan aplikasi untuk mengikat MessageId
konteks proses bisnis dari mana dapat diprediksi direkonstruksi ketika kegagalan terjadi.
Untuk proses bisnis di mana beberapa pesan dikirim selama menangani beberapa konteks aplikasi, MessageId
dapat menjadi komposit dari pengidentifikasi konteks tingkat aplikasi, seperti nomor pesanan pembelian, dan subjek pesan, misalnya, 12345.2017/payment.
MessageId
selalu dapat berupa beberapa GUID, tetapi penjangkaran pengidentifikasi ke proses bisnis menghasilkan pengulangan yang dapat diprediksi, yang diinginkan untuk menggunakan fitur deteksi duplikat secara efektif.
Penting
- Ketika partisi diaktifkan,
MessageId+PartitionKey
digunakan untuk menentukan keunikan. Ketika sesi diaktifkan, kunci partisi dan ID sesi harus sama. - Ketika partisi dinonaktifkan (default), hanya
MessageId
yang digunakan untuk menentukan keunikan. - Untuk informasi tentang
SessionId
,PartitionKey
, danMessageId
, lihat Penggunaan kunci partisi. - Saat menggunakan partisi dan mengirim batch pesan, Anda harus memastikan bahwa mereka tidak berisi properti identifikasi partisi apa pun. Karena deduplikasi bergantung pada pengaturan ID pesan secara eksplisit untuk menentukan keunikan, tidak disarankan untuk menggunakan deduplikasi dan batching bersama dengan partisi.
Catatan
Pesan terjadwal disertakan dalam deteksi duplikat. Oleh karena itu, jika Anda mengirim pesan terjadwal lalu mengirim pesan duplikat yang tidak terjadwal, pesan yang tidak dijadwalkan akan dihilangkan. Demikian pula, jika Anda mengirim pesan yang tidak terjadwal lalu pesan terjadwal duplikat, pesan terjadwal akan dihilangkan.
Ukuran jendela deteksi duplikat
Selain hanya mengaktifkan deteksi duplikat, Anda juga dapat mengonfigurasi ukuran jendela waktu riwayat deteksi duplikat tempat ID pesan dipertahankan. Nilai ini default hingga 10 menit untuk antrean dan topik, dengan nilai minimal 20 detik hingga nilai maksimal 7 hari.
Mengaktifkan deteksi duplikat dan ukuran jendela berdampak langsung pada throughput antrean (dan topik), karena semua ID pesan yang direkam harus dicocokkan dengan pengidentifikasi pesan yang baru dikirimkan.
Menjaga jendela tetap kecil berarti lebih sedikit ID pesan yang harus dipertahankan dan dicocokkan, dan throughput berdampak lebih sedikit. Untuk entitas throughput tinggi yang memerlukan deteksi duplikat, Anda harus menjaga jendela sekecil mungkin.
Langkah berikutnya
Anda dapat mengaktifkan deteksi pesan duplikat menggunakan portal Microsoft Azure, PowerShell, CLI, Template Manajer Sumber Daya, .NET, Java, Python, dan JavaScript. Untuk informasi selengkapnya, lihat Mengaktifkan deteksi pesan duplikat.
Dalam skenario di mana kode klien tidak dapat mengirim ulang pesan dengan MessageId yang sama seperti sebelumnya, penting untuk mendesain pesan yang dapat diolah ulang dengan aman. Posting blog ini tentang idempotence menggambarkan berbagai teknik untuk bagaimana melakukan itu.
Cobalah sampel dalam bahasa pilihan Anda untuk menjelajahi fitur Azure Service Bus.
- Sampel pustaka klien Azure Service Bus untuk .NET (terbaru)
- Sampel pustaka klien Azure Service Bus untuk Java (terbaru)
- Sampel pustaka klien Azure Service Bus untuk Python
- Sampel pustaka klien Azure Service Bus untuk JavaScript
- Sampel pustaka klien Azure Service Bus untuk TypeScript
Lihat sampel untuk pustaka klien .NET dan Java yang lebih lama di sini:
- Sampel pustaka klien Azure Service Bus untuk .NET (warisan)
- Sampel pustaka klien Azure Service Bus untuk Java (warisan)
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.