Ho un semplice programma di test RabbitMQ che esegue l'aggancio casuale dei messaggi e un altro li legge tutti utilizzando Spring-AMQP. Se il consumatore muore (ad esempio uccidendo un processo senza avere la possibilità di chiudere la connessione o il canale), tutti i messaggi che non ha riconosciuto sembrano non essere riconosciuti per sempre.quando muore un canale AMQP/RabbitMQ senza connessioni?
Ho visto un numero di riferimenti (ad esempio this question) che dicono che il canale muore quando non ha connessioni e che i restanti messaggi non bloccati saranno riconsegnati. Questo non è il comportamento che vedo, ma ottengo un elenco crescente di canali contrassegnati come IDLE e un elenco crescente di connessioni contrassegnate come in esecuzione ma senza attività.
Esiste qualche configurazione necessaria per notare che le connessioni sono morte una volta che il processo è stato interrotto?
EDIT: stavo correndo il server RabbitMQ all'interno di una macchina virtuale VirtualBox, che a quanto pare non gestisce le connessioni in entrata morti correttamente su NAT. Funziona perfettamente con il server di mq che esegue direttamente sull'host fisico.
FYI: Avevo un problema simile in cui le code esclusive non venivano pulite sul broker in modo tempestivo dopo la morte del consumatore esclusivo. Ciò ha impedito l'avvio di questi componenti con nomi deterministici. È stato risolto impostando 'ConnectionFactory.RequestedHeartbeat' su un valore piccolo (secondi) – drstevens