Pengurutan dan tanda waktu pesan

Pengurutan dan penandaan waktu adalah dua fitur yang selalu diaktifkan pada semua entitas dan permukaan Azure Service Bus melalui properti Sequence​Number dan EnqueuedTimeUtc dari pesan yang diterima atau ditelusuri.

Untuk kasus di mana rentetan pesan absolut dianggap penting dan/atau konsumen memerlukan pengidentifikasi unik untuk pesan, broker akan menandai pesan dengan bebas-celah, yang meningkatkan nomor urut sesuai antrean atau topik. Untuk entitas yang dipartisi, nomor urutan diberikan sesuai dengan partisi.

Nomor urut

Nilai SequenceNumber adalah bilangan bulat 64-bit unik yang ditetapkan untuk pesan karena diterima dan disimpan oleh broker dan fungsi sebagai pengidentifikasi internalnya. Untuk entitas yang dipartisi, 16 bit teratas mencerminkan pengidentifikasi partisi. Angka urutan bergulir ke nol saat rentang 48/64-bit habis terpakai.

Nomor urut dapat dipercaya sebagai pengidentifikasi unik karena ditetapkan oleh otoritas pusat dan netral dan bukan oleh klien. Hal ini juga mewakili rentetan kedatangan yang sebenarnya, dan lebih presisi dibandingkan dengan tanda waktu sebagai kriteria rentetan, karena tanda waktu mungkin tidak memiliki resolusi yang cukup tinggi pada laju pesan yang ekstrim dan tunduk pada kecondongan waktu (namun minimal) dalam situasi saat kepemilikan broker beralih antar simpul.

Rentetan kedatangan absolut memang penting, misalnya, dalam skenario bisnis di mana sejumlah kecil barang yang ditawarkan dilayani berdasarkan first-come-first-served (yang awal dilayani lebih dulu) sedangkan pasokan dilayani terakhir; contohnya adalah tiket konser.

Tanda Waktu

Kemampuan penandaan waktu bertindak sebagai otoritas netral dan tepercaya yang secara akurat menangkap waktu UTC kedatangan pesan, yang dicerminkan dalam properti EnqueuedTimeUtc. Nilai ini berguna jika skenario bisnis bergantung pada tenggat waktu, seperti apakah item kerja dikirimkan pada tanggal tertentu sebelum tengah malam, tetapi pemrosesannya jauh di belakang stok antrean.

Catatan

Nomor urut sendiri menjamin urutan antrean dan urutan ekstraktor pesan, tetapi bukan urutan pemrosesan, yang memerlukan sesi.

Katakanlah, ada 5 pesan dalam antrean dan 2 konsumen. Konsumen 1 mengambil pesan 1. Konsumen 2 mengambil pesan 2. Konsumen 2 selesai memproses pesan 2 dan mengambil pesan 3 sementara Konsumen 1 belum dilakukan dengan pesan pemrosesan 1. Konsumen 2 selesai memproses pesan 3 tetapi konsumen 1 masih belum dilakukan dengan memproses pesan 1. Terakhir, konsumen 1 menyelesaikan pesan pemrosesan 1. Jadi, pesan diproses dalam urutan ini: pesan 2, pesan 3, dan pesan 1. Jika Anda memerlukan pesan 1, 2, dan 3 untuk diproses secara berurutan, Anda perlu menggunakan sesi.

Jadi, jika pesan hanya perlu diambil secara berurutan, Anda tidak perlu menggunakan sesi. Jika pesan perlu diproses secara berurutan, gunakan sesi. ID sesi yang sama harus diatur pada pesan yang dimiliki bersama-sama, yang dapat berupa pesan 1, 4, dan 8 dalam satu set, dan 2, 3, dan 6 di set lain.

Untuk informasi selengkapnya, lihat Bus Layanan sesi pesan.

Pesan terjadwal

Anda dapat mengirimkan pesan ke antrean atau topik untuk pemrosesan yang tertunda; misalnya, untuk menjadwalkan pekerjaan agar tersedia untuk diproses oleh sistem pada waktu tertentu. Kemampuan ini mewujudkan penjadwal berbasis waktu terdistribusi yang andal.

Pesan terjadwal tidak muncul dalam antrean hingga waktu antrean yang ditentukan. Sebelum waktu tersebut, pesan terjadwal dapat dibatalkan. Pembatalan akan menghapus pesan.

Anda dapat menjadwalkan pesan menggunakan salah satu klien kami dengan dua cara:

  • Gunakan API pengiriman reguler, tetapi atur properti Scheduled​Enqueue​Time​Utc pada pesan sebelum pengiriman.
  • Gunakan API pesan jadwal, lewati pesan normal dan waktu yang dijadwalkan. API mengembalikan SequenceNumber pesan terjadwal, yang nantinya dapat Anda gunakan untuk membatalkan pesan terjadwal jika diperlukan.

Pesan terjadwal dan nomor urutnya juga dapat ditemukan menggunakan penjelajahan pesan.

SequenceNumber untuk pesan terjadwal hanya valid saat pesan berada dalam status ini. Saat pesan beralih ke status aktif, pesan ditambahkan ke antrean seolah-olah telah diantrekan pada instan saat ini, yang mencakup penetapan SequenceNumber baru.

Karena fitur ini didasarkan pada pesan individual dan pesan hanya dapat ditambahkan ke antrean sekali, Bus Layanan tidak mendukung jadwal berulang untuk pesan.

Catatan

Waktu antrean pesan tidak berarti bahwa pesan akan dikirim secara bersamaan. Ini akan diantrekan, tetapi waktu pengiriman aktual tergantung pada beban kerja antrean dan statusnya.

Catatan

Karena pertimbangan performa, aktivasi dan pembatalan pesan terjadwal adalah operasi independen tanpa penguncian bersama. Jika pesan sedang dalam proses diaktifkan dan dibatalkan secara bersamaan, proses aktivasi tidak akan dibalik dan pesan masih akan diaktifkan. Selain itu, ini berpotensi menyebabkan jumlah negatif pesan terjadwal. Untuk meminimalkan kondisi balapan ini, disarankan untuk menghindari penjadwalan operasi aktivasi dan pembatalan berturut-turut.

Menggunakan pesan terjadwal dengan alur kerja

Adalah umum untuk melihat alur kerja bisnis yang berjalan lebih lama yang memiliki komponen waktu eksplisit bagi mereka, seperti batas waktu 5 menit untuk autentikasi 2 faktor, batas waktu berjam-jam untuk pengguna yang mengonfirmasi alamat email mereka, dan komponen waktu lama multi-hari, minggu, atau bulan di domain seperti perbankan dan asuransi.

Alur kerja ini sering dimulai oleh pemrosesan beberapa pesan, yang kemudian menyimpan beberapa status, lalu menjadwalkan pesan untuk melanjutkan proses di lain waktu. Kerangka kerja seperti NServiceBus dan MassTransit memudahkan integrasi semua elemen ini bersama-sama.

Langkah berikutnya

Untuk mempelajari selengkapnya tentang olahpesan Microsoft Azure Service Bus, lihat topik berikut ini:

Sumber daya tambahan