İ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 Sequence​Number 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

SequenceNumber değeri, aracı ve işlevler tarafından iç tanımlayıcısı olarak kabul edildiği ve depolandığı için iletiye atanan benzersiz bir 64 bitlik tamsayıdır. Bölümlenmiş varlıklar için en üstteki 16 bit bölüm tanımlayıcısını yansıtır. 48/64 bit 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 minimum) 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, enqueuedTimeUtc özelliğine yansıtılan 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 Scheduled​Enqueue​Time​Utc 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.

Zamanlanmış iletinin SequenceNumber'ı yalnızca ileti bu durumdayken geçerlidir. İleti etkin duruma geçerken, ileti yeni bir SequenceNumber atamayı da içeren geçerli anında sıralanmış 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.

Not

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ın birbirini izleyen bir şekilde zamanlanmasından kaçınması önerilir.

zamanlanmış iletileri iş akışlarıyla kullanma

2 faktörlü 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 durumdur.

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.

Sonraki adımlar

Service Bus mesajlaşması hakkında daha fazla bilgi edinmek için aşağıdaki konulara bakın:

Ek kaynak