2013-03-08 70 views
0

根據我對RabbitMQ/AMQP的理解,我看到了一個不幸的折衷。RabbitMQ讓消費者在完成早期任務之前獲得更多任務

通常的工作流程是:

  1. 生產者產生
  2. 隊列傳送到消費者
  3. 消費者的ACK 並且不接收更多的任務,直到ACK
  4. 隊列認爲消息處理完整

所以問題就在於兩件事情:說「我可以接受更多的工作」,並說「我完成了這個任務。」問題是!我的消費機被配置爲並行處理50個任務,每個任務需要約30秒。但是,如果一項任務懸而未決或者失敗 - 需要重新遞交。如何做到這一點?

回答

1

使用

channel.basicQos(prefetchCount); 

其中預取數=不承認我可以處理的任務數量。

記錄例如here