Odraczanie komunikatów w Azure Service Bus

Gdy klient kolejki lub subskrypcji otrzyma wiadomość, którą jest gotów przetworzyć, ale przetworzenie jej nie jest obecnie możliwe ze względu na szczególne okoliczności, może odłożyć jej pobranie na później. Komunikat pozostaje w kolejce lub subskrypcji, ale jest odłożony na bok.

Kiedy należy używać odroczenia komunikatów

Odroczenie to funkcja utworzona specjalnie dla scenariuszy przetwarzania przepływu pracy. Struktury przepływu pracy mogą wymagać przetworzenia niektórych operacji w określonej kolejności. Mogą być zmuszeni odłożyć przetwarzanie niektórych otrzymanych wiadomości do czasu ukończenia wymaganych wcześniejszych działań wynikających z innych wiadomości.

Prosty przykład ilustracyjny to sekwencja przetwarzania zamówień, w której w systemie pojawia się powiadomienie o płatności od zewnętrznego dostawcy płatności przed propagacją pasującego zamówienia zakupu z witryny sklepu do systemu realizacji. W takim przypadku system realizacji zamówień może odroczyć przetwarzanie powiadomienia o płatności do czasu, aż pojawi się zamówienie, z którym będzie można je powiązać. W scenariuszach synchronizacji, w których komunikaty z różnych źródeł napędzają przebieg przepływu pracy, rzeczywista kolejność wykonywania może być poprawna, ale komunikaty informujące o wynikach mogą nadejść w niewłaściwej kolejności.

Odroczenie pomaga zmienić kolejność komunikatów z kolejności nadejścia na taką, w jakiej mogą zostać przetworzone, pozostawiając je bezpiecznie w magazynie komunikatów, gdy trzeba odroczyć ich przetwarzanie.

Jeśli nie można przetworzyć komunikatu, ponieważ określony zasób do obsługi tego komunikatu jest tymczasowo niedostępny, ale przetwarzanie komunikatów nie powinno być zawieszone, możesz odłożyć ten komunikat na bok przez kilka minut. Pamiętaj numer sekwencji w zaplanowanym komunikacie , który ma zostać opublikowany w ciągu kilku minut, i ponownie pobierz odroczony komunikat po nadejściu zaplanowanego komunikatu. Jeśli program obsługi komunikatów zależy od bazy danych dla wszystkich operacji, a ta baza danych jest tymczasowo niedostępna, nie używaj odroczenia. Zamiast tego wstrzymaj odbieranie komunikatów do momentu ponownego udostępnienia bazy danych.

Pobieranie komunikatów odroczonych

Odroczone komunikaty pozostają w głównej kolejce wraz ze wszystkimi innymi aktywnymi komunikatami (w przeciwieństwie do komunikatów dead-letter, które znajdują się w podkolejce), ale nie mogą już być odbierane za pomocą standardowych operacji odbierania. Komunikaty odroczone można odszukać za pomocą przeglądania lub podglądu komunikatów, jeśli aplikacja utraci informacje o nich.

Aby pobrać odroczony komunikat, właściciel musi zapamiętać numer sekwencji w chwili odraczania komunikatu. Każdy odbiornik, który zna numer sekwencji komunikatu odroczonego, może później odbierać komunikat przy użyciu metod odbierania, które przyjmują numer sekwencji jako parametr. Aby uzyskać więcej informacji na temat numerów sekwencji, zobacz Sekwencjonowanie komunikatów i znaczniki czasu.

Uwaga / Notatka

Odroczone komunikaty nie wygasają i automatycznie przechodzą do kolejki utraconych komunikatów, dopóki aplikacja kliencka nie spróbuje ich odebrać przy użyciu interfejsu API i numeru sekwencji. Jest to zamierzone działanie. Gdy klient próbuje pobrać odroczoną wiadomość, sprawdza się, czy spełnia ona warunek wygaśnięcia, a jeśli już wygasła, zostaje przeniesiona do kolejki komunikatów martwych. Wygasła wiadomość przechodzi do kolejki utraconych komunikatów tylko wtedy, gdy funkcja utraconych komunikatów jest włączona dla jednostki (kolejka lub subskrypcja).

Kluczowe zachowania komunikatów odroczonych

  • Odroczone komunikaty pozostają w głównej kolejce, nie w podkolejce.
  • Aby pobrać odroczony komunikat, należy użyć numeru sekwencyjnego komunikatu.
  • Odroczone wiadomości można znaleźć poprzez przeglądanie wiadomości (podgląd).
  • Odroczone komunikaty nie wygasają, dopóki klient nie spróbuje ich odebrać.
  • Sprawdzanie wygasania odbywa się tylko wtedy, gdy klient wywołuje interfejs API odbierania z numerem sekwencji.

Następne kroki

Wypróbuj przykłady w wybranym języku, aby zapoznać się z funkcjami usługi Azure Service Bus.