2017-02-13 18 views
5

Tôi đã sau thiết lập:Các nhiệm vụ được tìm nạp trước trong cần tây có được xác nhận không?

  • môi giới RabbitMQ + Django
  • Cần tây với CELERYD_PREFETCH_MULTIPLIER = 32 (Tôi có rất nhiều nhiệm vụ nhỏ do đó tìm nạp trước đó làm cho rất nhiều ý nghĩa từ việc thực hiện quan điểm)
  • CELERY_ACKS_LATE = False (nhiệm vụ không phải là idempotent)

Tôi chạy cần tây trong thùng chứa docker, vì vậy khi tôi xây dựng lại công nhân cần cẩu docker không được tắt một cách duyên dáng. Điều này là ok, nếu nhiệm vụ không được công nhận là nhà môi giới sẽ gửi lại cho họ khi công nhân lại hoạt động trở lại trong container mới, nhưng trong trường hợp khác họ sẽ bị mất.

Trong bảng điều khiển quản trị hoa đã được tìm nạp trước, đã nhận trạng thái.

Tôi đã đọc kỹ tài liệu chính thức và related question và bằng trực giác tôi cảm thấy rằng các tác vụ đã tìm nạp trước trong thiết lập của tôi được xác nhận. Có phải vậy không?

Trả lời

2

Với nhiệm vụ CELERY_ACKS_LATE=False sẽ được công nhận ngay khi nhân viên bắt đầu thực hiện: just before execution.

Vì vậy, nếu một nhân viên bắt đầu thực hiện nhiệm vụ và bạn giết nhiệm vụ đó sẽ bị mất. Các tác vụ được tìm nạp trước khác sẽ không bị mất vì chúng vẫn chưa được giải quyết.

+0

Thats có vẻ hợp lý, nhưng các tác vụ được tìm nạp trước trong hoa được đánh dấu là 'ĐÃ NHẬN ĐƯỢC' - điều đó có nghĩa là chúng chưa bắt đầu được thực thi? –

+0

Tôi đoán 'RECEIVED' có nghĩa là' Chưa được xếp hạng' về Rabbitmq. Các công nhân khác không thể tìm nạp trước chúng vì chúng không phải là 'Sẵn sàng'. Nhưng nếu nhân viên mất kết nối mà không có sự thừa nhận, họ sẽ trở thành 'Sẵn sàng'. – Raz

+0

Nhưng nếu tôi khởi động lại máy chủ cần tây (khởi động lại cứng), thỏmq sẽ biết rằng những nhiệm vụ này có thể được gán cho các nút khác không? –

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