Deteksi duplikat

Jika aplikasi gagal karena kesalahan fatal segera setelah mengirim pesan, dan instans aplikasi yang dimulai ulang 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 mungkin merupakan komposit dari pengidentifikasi konteks tingkat aplikasi, seperti nomor pesanan pembelian, dan subjek pesan, misalnya, 12345.2017/pembayaran.

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 partisidiaktifkan, MessageId+PartitionKey digunakan untuk menentukan keunikan. Ketika sesi diaktifkan, kunci partisi dan ID sesi harus sama.
  • Ketika partisidinonaktifkan (default), hanya MessageId yang digunakan untuk menentukan keunikan.
  • Untuk informasi tentang SessionId, PartitionKey, dan MessageId, lihat Penggunaan kunci 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 di mana message-ids 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.

Lihat sampel untuk pustaka klien .NET dan Java yang lebih lama di sini:

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.