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