У меня есть простая тестовая программа RabbitMQ, которая случайным образом ставит сообщения в очередь, а другая читает их, используя Spring-AMQP. Если потребитель умирает (например, убивает процесс, не имея возможности закрыть его соединение или канал), любые сообщения, которые он не подтвердил, остаются неподтвержденными навсегда.
Я видел несколько ссылок (например, на этот вопрос ), в которых говорится, что канал умирает, когда у него нет соединений, и что оставшиеся сообщения unack'd будут доставлены. Это не то поведение, которое я вижу - вместо этого я получаю растущий список каналов, помеченных как IDLE, и растущий список соединений, помеченных как работающие, но без активности.
Требуется ли какая-либо конфигурация, чтобы заметить, что соединения были разорваны после завершения процесса?
EDIT:
Я работал на сервере rabbitmq внутри виртуальной машины VirtualBox, которая, по-видимому, неправильно управляет мертвыми входящими соединениями через NAT. Это прекрасно работает с сервером mq, работающим непосредственно на физическом хосте.