Tôi đang sử dụng nhà sản xuất RabbitMQ để gửi các tác vụ chạy dài (30 phút +) cho người tiêu dùng. Vấn đề là người tiêu dùng vẫn đang làm việc trên một nhiệm vụ khi kết nối đến máy chủ bị đóng và nhiệm vụ chưa được trả lời được yêu cầu.RabbitMQ đóng kết nối khi xử lý các tác vụ chạy dài và cài đặt thời gian chờ tạo ra lỗi
Từ nghiên cứu, tôi hiểu rằng có thể sử dụng heartbeat hoặc increased connection timeout để giải quyết vấn đề này. Cả hai giải pháp này đều gây ra lỗi khi thử chúng. Khi đọc câu trả lời cho các bài viết tương tự, tôi cũng đã học được nhiều thay đổi đã được triển khai cho RabbitMQ kể từ khi câu trả lời được đăng (ví dụ: thời gian chờ nhịp tim mặc định đã thay đổi thành 60 từ 580 trước khi có RabbitMQ 3.5.5).
Khi xác định một nhịp tim và ngăn chặn kết nối thời gian chờ:
credentials = pika.PlainCredentials('user', 'password')
parameters = pika.ConnectionParameters('XXX.XXX.XXX.XXX', port, '/', credentials, blocked_connection_timeout=2000)
connection = pika.BlockingConnection(parameters)
channel = connection.channel()
Các lỗi sau đây được hiển thị:
TypeError: __init__() got an unexpected keyword argument 'blocked_connection_timeout'
Khi xác định heartbeat_interval=1000
trong kết nối thông số một lỗi tương tự được hiển thị: TypeError: __init__() got an unexpected keyword argument 'heartbeat_interval'
Và tương tự cho socket_timeout = 1000
lỗi sau được hiển thị: TypeError: __init__() got an unexpected keyword argument 'socket_timeout'
Tôi đang chạy RabbitMQ 3.6.1, pika 0.10.0 và python 2.7 trên Ubuntu 14.04.
- Tại sao các phương pháp trên tạo ra lỗi?
- Phương pháp tiếp cận nhịp tim có thể được sử dụng khi có nhiệm vụ liên tục chạy liên tục không? Ví dụ như nhịp tim có thể được sử dụng khi thực hiện các phép nối cơ sở dữ liệu lớn, mất 30 phút? Tôi ủng hộ cách tiếp cận nhịp tim nhiều lần rất khó để đánh giá một nhiệm vụ như tham gia cơ sở dữ liệu sẽ mất bao lâu.
Tôi đã đọc qua câu trả lời cho câu hỏi tương tự
Cập nhật: chạy code from the pika documentation tạo ra lỗi tương tự.
Có bất kỳ loại cân bằng tải nào đang ngồi trước máy chủ mq thỏ không? Môi trường của bạn trông như thế nào có thể liên quan đến việc trả lời câu hỏi này. – mschuett
Máy sản xuất và máy tiêu dùng đều nằm trên cùng một mạng riêng. – Greg
Vấn đề là bạn cần xử lý dữ liệu trong khi chờ đợi, ngay cả khi bạn không tiêu thụ tin nhắn; connection.process_data_events(). Nếu không, pika sẽ không phản ứng với nhịp tim. – eandersson