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 Sequence​NumberEnqueuedTimeUtc 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 i 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 zostanie wyczerpany zakres 48/64-bitowy.

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ć narażone na (jednak minimalne) niesymetryczność 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, odzwierciedlony we właściwości EnqueuedTimeUtc . 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 Scheduled​Enqueue​Time​Utc 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 zaplanowany komunikat SequenceNumber, którego można później 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.

Numer sekwencji dla zaplanowanego komunikatu jest prawidłowy tylko wtedy, gdy komunikat jest w tym stanie. 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 elementu SequenceNumber.

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.

Uwaga

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, zaleca się unikanie planowania operacji aktywacji i anulowania w bliskim odstępie czasu.

Używanie zaplanowanych komunikatów z przepływami pracy

Często zdarza się, aby zobaczyć dłuższe przepływy pracy biznesowe, które mają jawny składnik czasu do nich, takie jak 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.

Następne kroki

Aby dowiedzieć się więcej o komunikatach usługi Service Bus, zobacz następujące tematy:

Dodatkowy zasób