Podczas korzystania z RabbitMQ, niektóre scenariusze biznesowe wymagają zapewnienia sekwencyjnej konsumpcji. Na przykład, w scenariuszu biznesowym, w którym generowane są trzy wiadomości do wykonania operacji dodawania, modyfikowania i usuwania danych, jeśli kolejność konsumpcji nie jest zapewniona, kolejność wykonania może stać się usuń, zmodyfikuj, dodaj, co prowadzi do nieporządku.

Jak pokazano poniżej:

Kwestia uporządkowania wiadomości w RabbitMQ musi być rozważana pod względem trzech aspektów: kolejność wysyłania wiadomości, kolejność wiadomości w kolejce i kolejność konsumpcji wiadomości.

Kolejność wysyłania wiadomości

Kolejność przesyłania wiadomości na końcu wysyłającego wiadomość nie jest zazwyczaj ściśle wymagana dla większości przedsiębiorstw. Nie ma znaczenia, kto wysyła wiadomość pierwszy. Jeśli przedsiębiorstwo wymaga, aby wiadomości były wysyłane w określonej kolejności, oznacza to, że tylko jedna wiadomość może być wysłana naraz z blokadą globalną, a wiadomości nie mogą być wysyłane równocześnie.

Kolejność wiadomości w kolejce

W RabbitMQ wiadomości zostaną ostatecznie przechowywane w kolejce. W obrębie tej samej kolejki wiadomości są uporządkowane na zasadzie pierwszy na wejściu, pierwszy na wyjściu, co jest gwarantowane przez RabbitMQ i zazwyczaj nie wymaga uwagi ze strony programistów.

Uwaga: Kolejność wiadomości w różnych kolejkach nie jest gwarantowana. Na przykład, gdy wchodzisz do stacji metra i wybierasz jedną z trzech kolejek, kolejność wejścia na stację nie może być gwarantowana pomiędzy różnymi kolejkami.

Kolejność konsumpcji wiadomości

Gdy dyskutujemy o zapewnieniu sekwencyjnej konsumpcji wiadomości, zazwyczaj chodzi o kolejność, w której konsumenci konsumują wiadomości. W scenariuszach, gdzie wielu konsumentów konsumuje wiadomości z tej samej kolejki, zazwyczaj nie jest możliwe zapewnienie sekwencyjnej konsumpcji wiadomości. Jak wskazano na wykonanym diagramie, chociaż wiadomości w kolejce są uporządkowane, konsumenci jednocześnie konsumujący wiadomości, szybkość ich pobierania, szybkość wykonywania logiki biznesowej i ewentualne wyjątki wykonania mogą prowadzić do niespójnej sekwencji wiadomości.

Na przykład: Wiadomości A, B i C wchodzą do kolejki kolejno. Konsument A1 pobiera wiadomość A, a konsument B1 pobiera wiadomość B. Jednak jeśli konsument B1 wykonuje szybciej, może zakończyć przed konsumentem A1, lub jeśli konsument A1 napotyka błąd, oba scenariusze mogą prowadzić do niespójnej sekwencji wiadomości.

Typowe rozwiązanie problemu konsumpcji sekwencyjnej to posiadanie tylko jednego konsumenta w kolejce W ten sposób wiadomości mogą być przetwarzane pojedynczo i sekwencyjnie. Wadą jest zmniejszenie zdolności współbieżnej oraz niemożliwość współbieżnej konsumpcji wiadomości. Jest to kompromis.

Uwaga: Jeśli przedsiębiorstwo wymaga sekwencyjnej konsumpcji oraz zwiększonej współbieżności, powszechne podejście polega na umożliwieniu wielu kolejk. Przedsiębiorstwo może rozdzielać wiadomości do różnych kolejek na podstawie reguł, zwiększając poziom współbieżności. Na przykład, w scenariuszu zamówień w handlu elektronicznym, konieczne jest zapewnienie sekwencji wiadomości zamówienia dla tego samego użytkownika. Wiadomości należące do różnych użytkowników mogą być kierowane do różnych kolejek.