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?

Author: Roman Cheplyaka, 2015-03-01

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 z requeue=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 z requeue=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.

 32
Author: IMSoP,
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.

 1
Author: jhilden,
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