Tôi có một chương trình thử nghiệm RabbitMQ đơn giản cho các tin nhắn ngẫu nhiên enqueuing, và một đọc chúng, tất cả bằng cách sử dụng Spring-AMQP. Nếu người tiêu dùng chết (ví dụ như giết chết một quá trình mà không có cơ hội đóng kết nối hoặc kênh của nó), bất kỳ thông điệp nào mà nó không được thừa nhận dường như vẫn chưa được biết đến mãi mãi.khi nào kênh AMQP/RabbitMQ không có kết nối chết?
Tôi đã thấy một số tham chiếu (ví dụ: this question) nói rằng kênh sẽ chết khi không có kết nối và các thư còn lại chưa được gửi sẽ được gửi lại. Đó không phải là hành vi tôi thấy - thay vào đó tôi nhận được danh sách ngày càng tăng về các kênh được đánh dấu IDLE và danh sách các kết nối đang phát triển được đánh dấu đang chạy nhưng không có hoạt động.
Có một số cấu hình cần thiết để nhận thấy rằng kết nối được chết một lần quá trình này đã bị giết?
EDIT: Tôi đã chạy máy chủ thỏmq bên trong VirtualBox VM, điều này dường như không quản lý các kết nối gửi đến chết một cách chính xác trên NAT. Điều này hoạt động tốt với máy chủ mq chạy trực tiếp trên máy chủ vật lý.
FYI: Tôi đã gặp phải vấn đề tương tự khi hàng đợi độc quyền không được làm sạch lên nhà môi giới một cách kịp thời sau khi người tiêu dùng độc quyền chết. Điều này ngăn cản các thành phần này với các tên xác định bắt đầu. Nó đã được giải quyết bằng cách thiết lập 'ConnectionFactory.RequestedHeartbeat' thành một giá trị nhỏ (giây) – drstevens