2017-08-20 27 views
12

Tôi muốn tận dụng Celery (với RabbitMQ làm phụ trợ MQ) để thực hiện các nhiệm vụ có hương vị khác nhau thông qua các Hàng đợi khác nhau. Một yêu cầu là tiêu thụ (bởi người lao động) từ một Hàng đợi cụ thể nên có khả năng bị tạm dừng và tiếp tục.công nhân không tiêu thụ công việc sau khi cần tây add_consumer được gọi là

Cần tây, dường như có this capability qua gọi add_consumercancel_consumer. Trong khi tôi có thể hủy việc tiêu thụ các nhiệm vụ từ hàng đợi cho một công nhân cụ thể, tôi không thể yêu cầu nhân viên tiếp tục tiêu thụ bằng cách gọi add_consumer. The code to reproduce this issue is provided here. Đoán của tôi có thể là tôi thiếu một số loại tham số được cung cấp hoặc trong celeryconfig hoặc thông qua các đối số khi bắt đầu công nhân?

Thật tuyệt vời khi có được đôi mắt mới mẻ về điều này. Không có nhiều thảo luận về Stackoverflow liên quan đến add_consumer cũng như trong Github. Vì vậy, tôi hy vọng có một số chuyên gia ở đây sẵn sàng chia sẻ suy nghĩ/kinh nghiệm của họ.

-

Tôi đang chạy dưới đây:

Hệ điều hành Windows, RabbitMQ 3.5.6, Erlang 18.1, Python 3.3.5, cần tây 3.1.15

Trả lời

2

Để tiếp tục từ hàng đợi, bạn cần phải xác định tên hàng đợi cũng như công nhân mục tiêu. Đây là cách làm.

app.control.add_consumer(queue='high', destination=['[email protected]']) 

Đây là add_consumer chữ ký

def add_consumer(state, queue, exchange=None, exchange_type=None, 
      routing_key=None, **options): 

Trong trường hợp của bạn, bạn đang gọi với

app.control.add_consumer('high', destination=['[email protected]']) 

Vì vậy high là nhận được truyền cho nhà nước và hàng đợi rỗng. Vì vậy, nó không thể tiếp tục.

+0

Cảm ơn bạn đã thử. Gist đa tập tin mà tôi đã cung cấp để tái tạo hành vi này là sử dụng add_consumer. Trong khi nhân viên thừa nhận thực hiện add_consumer, nó không tiếp tục tiêu thụ các nhiệm vụ trong hàng đợi. Tôi nghi ngờ cần tây của tôi không được đặt đúng cách hoặc có lỗi tiềm ẩn trong cần tây. – teng

+0

@teng Bạn đã thử với 'queue = high' trong khi thêm người tiêu dùng? Tôi đã sử dụng ý chính của bạn và sao chép hành vi. Sau khi chuyển các thông số thích hợp, nó hoạt động chính xác. – ChillarAnand

+0

Tôi đã thêm 'queue = high' làm kwarg vào add_consumer, như trái ngược với chỉ arg, và sau khi thực hiện resume.py, công nhân vẫn không tốn công việc. Bạn có phiền cho tôi biết hệ điều hành của bạn là gì không, và phiên bản thỏ và cần tây bạn đang sử dụng? – teng

Các vấn đề liên quan