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。
|