16

私はこれがどのように機能するかを誤解しているかもしれませんが (それが私が尋ねている理由です)、セロリワーカーがRabbitMQからタスクを消費すると、いわばロックがかかり、そのタスクが完了したことを認めなければならないと思います一旦完了です。したがって、すべてのプリフェッチ設定が 1 で、長い時間がかかる 6 つのタスクのキューを持つ 4 つのワーカーがあるとします。これらのワーカーを起動したら、次を実行します。

rabbitmqctl -q list_queues name messages messages_ready messages_unacknowledged

私は次のようなものを見ると思います:

celery  6       2       4

4 つのタスクが実行中であり (ただし、まだ認識されていません)、2 つのタスクが消費される準備ができていることを示します。

私が実際に見ているのは次のとおりであるため、私の理解は間違っていると思います。

celery  2       0       2

つまり、メッセージがワーカーによって受信されたときに、そのワーカーがそのタスクの処理を完了する前に確認応答が発生するかのようです。

要約すると、私の質問は、セロリ ワーカーが自分にタスクがあることをいつ認識するかということです。作業が完了したときではなく、そのタスクを受け取って作業を開始したときのようです。誰か確認できますか?

4

1 に答える 1

22

これは FAQ に記載されていますが、見つからないことを責めることはできません: http://docs.celeryproject.org/en/latest/faq.html#should-i-use-retry-or-acks-late

ユーザーに冪等タスクの作成を強制したくないため、初期 ack のデフォルトの動作があります。

于 2012-09-26T10:39:24.937 に答える