2012-11-16 14 views
6

Używam instancji punktów na EC2 do konsumpcji z kolejki RabbitMQ. Każde zadanie zajmuje kilka sekund i wymaga ręcznego "potwierdzenia".Konsumenci "Zombie" RabbitMQ

Problemy pojawiają się, gdy instancja jest zakończona. Nie ma czasu na czyste zamknięcie klientów AMQP, więc pozostaję z serwerem RabbitMQ, wciąż myśląc, że martwi konsumenci wciąż istnieją. Nie przekazuje ponownie swoich zadań i wciąż kieruje do nich nowe zadania.

W jaki sposób mogę uzyskać RabbitMQ, aby automatycznie wylogować konsumentów zombie i usunąć ich z puli pracowników?

Odpowiedz

5

Polecam ustawienie właściwości Heartbeat na połączeniu RabbitMQ. Jeśli tętno ustanie, RabbitMQ ostatecznie przerwie połączenie i odłoży nieprzypisane wiadomości z powrotem do kolejki.

1

Byłem w tym samym miejscu co Ty i rozwiązałeś je, ustawiając właściwość połączenia pulsu po stronie użytkownika (Node.Js przy użyciu modułu node_amqp). Połączenie jest zamykane i usuwane razem z konsumentem "zombie". Nieodebrane zadania wracają do stanu Gotowe.