Ack lub Nack w rabbitMQ
Używam rabbitMQ, każdą wiadomość z kolejki pobieram z basic_get bez procedury automatycznego ackowania, co oznacza, że wiadomość pozostaje w kolejce, dopóki nie ack lub nack wiadomości.
Czasami mam wiadomości, których nie można przetworzyć z powodu rzuconego wyjątku, co uniemożliwiło ich pełne przetworzenie.
Pytanie jakie to ma znaczenie, jeśli zarówno ack wiadomości w sukces i wyjątek wyrzucony, mam na myśli, jeśli chodzi o wiadomości wynik zawsze wyjdzie z Kolejka, więc jakie to ma znaczenie, jeśli używam ack lub nack w tym scenariuszu? Może brakuje mi czegoś podczas korzystania z każdej opracji?
2 answers
The basic.polecenie Nack jest najwyraźniej rozszerzeniem RabbitMQ, które rozszerza funkcjonalność basic.Odrzuć , aby włączyć tryb przetwarzania zbiorczego. Oba zawierają flagę" bit " (tj. boolean) z requeue
, więc masz kilka możliwości wyboru:
-
nack
/reject
zrequeue=1
: wiadomość zostanie zwrócona do kolejki, z której pochodzi, tak jakby była nową wiadomością; może to być przydatne w przypadku tymczasowej awarii po stronie konsumenta -
nack
/reject
z [6]} i skonfigurowana Wymiana martwych liter (DLX), opublikuje wiadomość do tej wymiany, umożliwiając jej odebranie przez inną kolejkę -
nack
/reject
zrequeue=0
i żaden DLX po prostu nie odrzuci wiadomości -
ack
usunie wiadomość z kolejki, nawet jeśli skonfigurowany jest DLX
Jeśli nie masz skonfigurowanego DLX, zawsze używanie ack
będzie takie samo jak nack
/reject
z requeue=0
; jednak użycie logicznie poprawnej funkcji od początku da ci więcej elastyczność, aby skonfigurować rzeczy inaczej później.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-02 19:21:41
Ack i Nack usuwają wiadomość z kolejki, różnica polega na tym, że gdy Nack wiadomość trafia do DLX (dead letter queue), jeśli jest zdefiniowana dla tej kolejki.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-02 19:02:13