Sekwencjonowanie i sygnatury czasowe komunikatów
Sekwencjonowanie i sygnatura czasowa to dwie funkcje, które są zawsze włączone we wszystkich jednostkach usługi Service Bus i są wyświetlane za pośrednictwem SequenceNumber
EnqueuedTimeUtc
właściwości i odebranych lub przeglądanych komunikatów.
W takich przypadkach, w których bezwzględna kolejność komunikatów jest znacząca i/lub gdy konsument potrzebuje wiarygodnego unikatowego identyfikatora komunikatów, broker sygnaturuje komunikaty bez przerwy, zwiększając liczbę sekwencji względem kolejki lub tematu. W przypadku jednostek partycjonowanych numer sekwencji jest wystawiany względem partycji.
Numer sekwencyjny
Wartość SequenceNumber
jest unikatową 64-bitową liczbą całkowitą przypisaną do komunikatu, ponieważ jest akceptowana i przechowywana przez brokera oraz działa jako identyfikator wewnętrzny. W przypadku jednostek partycjonowanych najważniejsze 16 bitów odzwierciedla identyfikator partycji. Liczby sekwencji są przerzucane do zera, gdy zakres 64-bitowy lub 48-bitowy (z wyłączeniem 16 bitów dla identyfikatora partycji) jest wyczerpany.
Numer sekwencji może być zaufany jako unikatowy identyfikator, ponieważ jest przypisany przez centralny i neutralny urząd, a nie przez klientów. Reprezentuje on również prawdziwą kolejność przylotu i jest bardziej precyzyjny niż sygnatura czasowa jako kryterium zamówienia, ponieważ sygnatury czasowe mogą nie mieć wystarczająco wysokiej rozdzielczości w skrajnych szybkościach komunikatów i mogą być przedmiotem (jednak minimalnego) niesymetryczności zegara w sytuacjach, w których własność brokera przechodzi między węzłami.
Bezwzględne zamówienie przyjazdu ma znaczenie, na przykład w scenariuszach biznesowych, w których ograniczona liczba oferowanych towarów jest obsługiwana w pierwszej kolejności, podczas gdy dostawy ostatnie; Sprzedaż biletów koncertowych jest przykładem.
Sygnatura czasowa
Możliwość sygnatury czasowej działa jako neutralny i godny zaufania urząd, który dokładnie przechwytuje czas UTC nadejścia wiadomości, odzwierciedlone we EnqueuedTimeUtc
właściwości. Wartość jest przydatna, jeśli scenariusz biznesowy zależy od terminów ostatecznych, takich jak to, czy element roboczy został przesłany w określonej dacie przed północą, ale przetwarzanie znajduje się daleko za listą prac kolejki.
Uwaga
Numer sekwencji samodzielnie gwarantuje kolejność kolejkowania i kolejność wyodrębniania komunikatów, ale nie kolejność przetwarzania, która wymaga sesji.
Załóżmy, że w kolejce znajduje się 5 komunikatów i 2 odbiorców. Użytkownik 1 odbiera komunikat 1. Użytkownik 2 odbiera komunikat 2. Użytkownik 2 kończy przetwarzanie komunikatu 2 i odbiera komunikat 3, podczas gdy użytkownik 1 nie jest jeszcze wykonywany z przetwarzaniem komunikatu 1. Użytkownik 2 kończy przetwarzanie komunikatu 3, ale konsument 1 nadal nie jest jeszcze wykonywany z przetwarzaniem komunikatu 1. Na koniec użytkownik 1 kończy przetwarzanie komunikatu 1. Komunikaty są przetwarzane w tej kolejności: komunikat 2, komunikat 3 i komunikat 1. Jeśli potrzebujesz komunikatu 1, 2 i 3 do przetworzenia w kolejności, musisz użyć sesji.
Jeśli więc komunikaty muszą być pobierane tylko w określonej kolejności, nie trzeba używać sesji. Jeśli komunikaty muszą być przetwarzane w kolejności, użyj sesji. Ten sam identyfikator sesji powinien być ustawiony na komunikaty, które należą do siebie, które mogą być komunikatami 1, 4 i 8 w jednym zestawie, a 2, 3 i 6 w innym zestawie.
Aby uzyskać więcej informacji, zobacz Sesje komunikatów usługi Service Bus.
Zaplanowane komunikaty
Komunikaty można przesyłać do kolejki lub tematu w celu wykonania opóźnionego przetwarzania, na przykład aby zaplanować udostępnienie zadania do przetwarzania przez system w określonym czasie. Ta funkcja realizuje niezawodny rozproszony harmonogram oparty na czasie.
Zaplanowane komunikaty nie materializować w kolejce do czasu kolejki zdefiniowanej kolejki. Przed tym czasem można anulować zaplanowane komunikaty. Anulowanie usuwa komunikat.
Komunikaty można zaplanować przy użyciu dowolnego z naszych klientów na dwa sposoby:
- Użyj zwykłego interfejsu API wysyłania, ale ustaw
ScheduledEnqueueTimeUtc
właściwość w komunikacie przed wysłaniem. - Użyj interfejsu API komunikatów harmonogramu, przekaż zarówno normalny komunikat, jak i zaplanowany czas. Interfejs API zwraca komunikat zaplanowany
SequenceNumber
, którego później można użyć do anulowania zaplanowanego komunikatu w razie potrzeby.
Zaplanowane komunikaty i ich numery sekwencji można również odnaleźć przy użyciu przeglądania komunikatów.
Dla SequenceNumber
zaplanowanego komunikatu jest prawidłowy tylko wtedy, gdy komunikat jest w stanie zaplanowanym. Gdy komunikat przechodzi do stanu aktywnego, komunikat jest dołączany do kolejki tak, jakby został on w kolejce w kolejce w bieżącej chwili, co obejmuje przypisanie nowego SequenceNumber
elementu .
Ponieważ funkcja jest zakotwiczona na poszczególnych komunikatach i komunikaty można kolejkować tylko raz, usługa Service Bus nie obsługuje cyklicznych harmonogramów komunikatów.
Uwaga
- Czas kolejkowania komunikatów nie oznacza, że wiadomość zostanie wysłana w tym samym czasie. Zostanie on w kolejce, ale rzeczywisty czas wysyłania zależy od obciążenia kolejki i jego stanu.
- Ze względu na zagadnienia dotyczące wydajności aktywacja i anulowanie zaplanowanych komunikatów są niezależnymi operacjami bez wzajemnego blokowania. Jeśli komunikat jest w trakcie aktywowania i jest jednocześnie anulowany, proces aktywacji nie zostanie odwrócony, a komunikat będzie nadal aktywowany. Ponadto może to potencjalnie prowadzić do negatywnej liczby zaplanowanych komunikatów. Aby zminimalizować ten stan wyścigu, zalecamy unikanie planowania operacji aktywacji i anulowania w bliskim odstępie czasu.
Używanie zaplanowanych komunikatów z przepływami pracy
Często można wyświetlać długotrwałe przepływy pracy biznesowe, które mają dla nich jawny składnik czasu, na przykład 5-minutowe limity czasu uwierzytelniania dwuskładnikowego, limity czasu godzin dla użytkowników potwierdzające ich adres e-mail oraz wielodniowe, tygodniowe lub miesięczne składniki czasu długiego w domenach, takich jak bankowość i ubezpieczenie.
Te przepływy pracy są często uruchamiane przez przetwarzanie niektórych komunikatów, które następnie przechowuje pewien stan, a następnie planuje komunikat, aby kontynuować proces w późniejszym czasie. Struktury takie jak NServiceBus i MassTransit ułatwiają integrowanie wszystkich tych elementów razem.
Powiązana zawartość
Aby dowiedzieć się więcej o komunikatach usługi Service Bus, zobacz następujące tematy: