İleti sıralama ve zaman damgaları
Sıralama ve zaman damgası, tüm Service Bus varlıklarında her zaman etkinleştirilen ve alınan veya göz atılan iletilerin SequenceNumber
ve EnqueuedTimeUtc
özellikleri aracılığıyla ortaya çıkar olan iki özelliktir.
İletilerin mutlak sırasının önemli olduğu ve/veya bir tüketicinin iletiler için güvenilir benzersiz bir tanımlayıcıya ihtiyaç duyduğu durumlarda, aracı iletileri boşluğa sahip olarak damgalar ve kuyruğa veya konuya göre sıra numarasını artırır. Bölümlenmiş varlıklar için, bölüme göre sıra numarası verilir.
Numara serisi
Değer SequenceNumber
, bir iletiye atanan benzersiz bir 64 bit tamsayıdır; aracı tarafından kabul edilir ve depolanır ve iç tanımlayıcısı olarak işlev görür. Bölümlenmiş varlıklar için en üstteki 16 bit bölüm tanımlayıcısını yansıtır. 64 bit veya 48 bit (bölüm tanımlayıcısı için 16 bit hariç) aralığı tükendiğinde sıra numaraları sıfıra yuvarlanır.
Sıra numarası, istemciler tarafından değil merkezi ve nötr bir yetkili tarafından atandığından benzersiz tanımlayıcı olarak güvenilir. Ayrıca gerçek varış sırasını temsil eder ve sipariş ölçütü olarak zaman damgasından daha kesindir, çünkü zaman damgaları aşırı ileti hızlarında yeterince yüksek bir çözünürlüğe sahip olmayabilir ve aracı sahipliğinin düğümler arasında geçiş yaptığı durumlarda (ancak en düşük) saat dengesizliğine maruz kalabilir.
Mutlak varış siparişi, örneğin sınırlı sayıda teklif edilen malın ilk gelen ilk servis esasına göre sunulduğu iş senaryolarında, sarf malzemelerinin sonlanmasında önemlidir; konser bileti satışları örnek olarak verilmişti.
Zaman damgası
Zaman damgalama özelliği, özelliğine yansıtılan EnqueuedTimeUtc
bir iletinin UTC varış saatini doğru bir şekilde yakalayan nötr ve güvenilir bir yetkili işlevi görür. İş senaryosu, iş öğesinin gece yarısından önce belirli bir tarihte gönderilip gönderilmediği ancak işlemin kuyruk kapsamı dışında olup olmadığı gibi son tarihlere bağlıysa bu değer yararlıdır.
Not
Sıra numarası kendi başına sıraya alma sırasını ve iletilerin ayıklayıcı sırasını garanti eder, ancak oturumlar gerektiren işleme sırasını garanti eder.
Kuyrukta 5 ileti ve 2 tüketici olduğunu varsayalım. Tüketici 1, ileti 1'i alır. Tüketici 2, 2. iletiyi alır. Tüketici 2, ileti 2'yi işlemeyi tamamlar ve 3. iletiyi alırken, Tüketici 1 henüz ileti 1'i işlemeyle tamamlanmamıştır. Tüketici 2, ileti 3'in işlenmesini tamamlar, ancak tüketici 1 yine de ileti 1'i işlemeyi tamamlamaz. Son olarak, tüketici 1 ileti 1'i işlemeyi tamamlar. Dolayısıyla iletiler şu sırayla işlenir: ileti 2, ileti 3 ve ileti 1. 1, 2 ve 3 iletilerinin sırayla işlenmesi gerekiyorsa oturumları kullanmanız gerekir.
Bu nedenle, iletilerin yalnızca sırayla alınması gerekiyorsa oturumları kullanmanız gerekmez. İletilerin sırayla işlenmesi gerekiyorsa oturumları kullanın. Aynı oturum kimliği, bir kümede 1, 4 ve 8, başka bir kümede 2, 3 ve 6 olabilecek, birbirine ait iletilerde ayarlanmalıdır.
Daha fazla bilgi için bkz . Service Bus ileti oturumları.
Zamanlanmış iletiler
Bir kuyruğa veya konu başlığına daha sonra işlenmek; örneğin belirli bir işi belirli bir zamanda sistem tarafından işlenmeye uygun hale gelmesi için zamanlamak üzere ileti gönderebilirsiniz. Bu özellik, güvenilir bir dağıtılmış zaman tabanlı zamanlayıcıyı hayata geçirmektedir.
Zamanlanmış iletiler, tanımlanan sıraya alınana kadar kuyrukta gerçekleşmez. Bu süreden önce zamanlanmış iletiler iptal edilebilir. İptal işlemi iletiyi siler.
müşterilerimizden herhangi birini kullanarak iletileri iki yolla zamanlayabilirsiniz:
- Normal gönderme API'sini
ScheduledEnqueueTimeUtc
kullanın, ancak göndermeden önce iletide özelliğini ayarlayın. - Zamanlama iletisi API'sini kullanın, hem normal iletiyi hem de zamanlanan saati geçirin. API, zamanlanmış iletinin
SequenceNumber
değerini döndürür ve daha sonra gerekirse zamanlanmış iletiyi iptal etmek için kullanabilirsiniz.
Zamanlanmış iletiler ve bunların sıra numaraları da ileti gözatma kullanılarak bulunabilir.
SequenceNumber
Zamanlanmış ileti için yalnızca ileti zamanlanmış durumdayken geçerlidir. İleti etkin duruma geçerken, yeni bir SequenceNumber
atamayı da içeren ileti, geçerli anında sıraya alınmış gibi kuyruğa eklenir.
Özellik tek tek iletilere sabitlendiğinden ve iletiler yalnızca bir kez sıraya alınabildiğinden, Service Bus iletiler için yinelenen zamanlamaları desteklemez.
Not
- İletinin sıralanma süresi, iletinin aynı anda gönderileceği anlamına gelmez. Sorgulanır, ancak gerçek gönderme süresi kuyruğun iş yüküne ve durumuna bağlıdır.
- Performansla ilgili önemli noktalar nedeniyle, zamanlanmış iletilerin etkinleştirilmesi ve iptal edilmesi, karşılıklı kilitleme olmadan yapılan bağımsız işlemlerdir. Bir ileti etkinleştirilme sürecindeyse ve aynı anda iptal edilirse, etkinleştirme işlemi geri alınmaz ve ileti yine de etkinleştirilir. Ayrıca, bu durum zamanlanmış iletilerin negatif sayımına yol açabilir. Bu yarış durumunu en aza indirmek için etkinleştirme ve iptal işlemlerinin zamanlamasını birbirini izleyen bir şekilde önlemenizi öneririz.
zamanlanmış iletileri iş akışlarıyla kullanma
2 öğeli kimlik doğrulaması için 5 dakikalık zaman aşımları, e-posta adreslerini onaylayan kullanıcılar için saat uzun zaman aşımları ve bankacılık ve sigorta gibi etki alanlarında çok günlük, hafta veya ay boyunca çalışan bileşenler gibi, kendilerine açık bir zaman bileşeni olan daha uzun süre çalışan iş akışlarını görmek yaygın bir durumdır.
Bu iş akışları genellikle bir iletinin işlenmesiyle başlatılır ve bu işlem daha sonra bir durum depolar ve daha sonra işleme devam etmek için bir ileti zamanlar. NServiceBus ve MassTransit gibi çerçeveler bu öğelerin tümünü birlikte tümleştirmeyi kolaylaştırır.
İlgili içerik
Service Bus mesajlaşması hakkında daha fazla bilgi edinmek için aşağıdaki konulara bakın: