2012-11-16 10 views
6

Sto usando istanze spot su EC2 per consumare da una coda RabbitMQ. Ogni lavoro richiede alcuni secondi e richiede un 'ack' manuale.Clienti RabbitMQ "Zombie"

I problemi si presentano quando un'istanza viene interrotta. Non c'è tempo per un arresto pulito dei consumatori AMQP, e così sono rimasto con il server RabbitMQ ancora pensando che i consumatori morti esistano ancora. Non restituisce nuovamente i loro posti di lavoro e inoltra sempre nuovi lavori a loro.

Come posso ottenere RabbitMQ per il timeout automatico degli utenti zombie e rimuoverli dal pool di worker?

risposta

5

Si consiglia di impostare la proprietà Heartbeat sulla connessione RabbitMQ. Se l'heartbeat si interrompe, RabbitMQ alla fine interromperà la connessione e rimetterà i messaggi non registrati nella coda.

1

Ero nello stesso posto e l'ho risolto impostando la proprietà heartbeat di connessione sul lato consumer (Node.Js usando il modulo node_amqp). La connessione viene chiusa e rimossa, insieme al consumatore "zombi". I lavori non compressi tornano a Pronto.