Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 26359|Odpowiedź: 2

Dogłębna analiza mechanizmu odpowiedzi na wiadomości RabbitMQ

[Skopiuj link]
Opublikowano 30.03.2018 10:42:59 | | | |


Gdy konsument otrzyma wiadomość i zadanie przetwarzania zostanie zakończone, wysyła komunikat o tym identyfikatorze wiadomości, informując serwer, że wiadomość została odebrana i przetwarzanie zakończone. RabbitMQ czeka, aż połączenie konsumenta przetwarzającego wiadomość zostanie utracone, zanim stwierdzi, że wiadomość nie została poprawnie przetworzona, więc RabbitMQ ponownie ją przesyła.
Potwierdzenie wiadomości jest domyślnie wyłączone. Podczas inicjalizacji Consumer istnieje parametr noAck,Jeśli ustawimy na prawdę, konsument zwróci potwierdzenie zaraz po otrzymaniu wiadomości


Ogólnie rzecz biorąc, powszechnie stosowany scenariusz noack jest ustawiony na true, ale dla projektów wymagających wysokiego ryzyka, takich jak płatności. Dla każdego przekazu musimy zadbać o jego integralność i poprawność. Po otrzymaniu wiadomości musisz potwierdzić, że poprawna logika biznesowa została wykonana, a następnie aktywnie zwrócić potwierdzenie na serwer. Możesz przeglądać wiadomości w kolejce przez rabbitmqctl list_queues nazwę message_rady message_unacknowleded polecenie lub przez interfejs zarządzania w tle.

Jeśli noAck jest ustawiony na false, klient musi aktywnie wysłać ack do serwera, a jeśli klient nie potwierdzi wiadomości, wystąpi następująca sytuacja:



Dopóki program działa, te 10 wiadomości pozostaje nieładowanych i nie mogą być ponownie dostarczone przez RabbitMQ. Co jest jeszcze potężniejsze, to fakt, żeKonsument wiadomości RabbitMQ nie posiada mechanizmu limitu czasu, to znaczy, jeśli program nie zostanie ponownie uruchomiony, wiadomość zawsze będzie w stanie Nieuruchomionym. Nie zapominaj o tych niewykorzystanych komunikatach stanowych podczas pracy nad wydarzeniami operacyjnymi.

Gotowi

Wiadomości o takim statusie znajdują się w kolejce do przetworzenia.

Nieuznany

Komunikat w tym statusie oznacza, że jest już przetwarzany, ale nie jest potwierdzany.




Gdy program zostanie zamknięty (o ile Konsument jest zamknięty), te 10 wiadomości wraca do stanu Gotowości.


Wiadomość potwierdzająca

Co jeśli klient wyśle alert do serwera? Czyli potwierdzić otrzymanie wiadomości? Kod jest następujący:


Gdy drugi parametr metody BasicAck, multiple, jest ustawiony na false, oznacza to, że RabbitMQ zostaje powiadomiony o potwierdzeniu bieżącej wiadomości.Jeśli jest to prawda, zostanie potwierdzona dodatkowa wiadomość mniejsza niż tag dostawy określony przez pierwszy parametr。 (Potwierdzenie masowe dotyczy całego kanału)

Potwierdzenie anulowania

Co jeśli jeden z klientów programu rozproszonego ma wyjątek i chce anulować potwierdzenie wiadomości, pozwalając innym klientom ją przetworzyć?

Gdy w wiadomości o konsumpcji pojawi się wyjątek, musimy anulować potwierdzenie, a następnie możemy użyć podstawowej metody Odrzucenia – kanału.

Pierwszy parametr określa tag dostawy, a drugi parametr opisuje, jak obsłużyć tę wiadomość o awarii.Wartość prawda oznacza, że wiadomość zostaje ponownie umieszczona w nagłówku kolejki, a wartość fałszywa oznacza, że wiadomość zostaje porzucona




Poprzedni:Nauczę cię, jak skonfigurować własny serwer DNS!
Następny:Baidu Maps do uzyskania współrzędnych miasta
Opublikowano 22.09.2021 20:49:04 |
Naucz się uczyć...
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com