2013-03-08 57 views
0

根据我对RabbitMQ/AMQP的理解,我看到了一个不幸的折衷。RabbitMQ让消费者在完成早期任务之前获得更多任务

通常的工作流程是:

  1. 生产者产生
  2. 队列传送到消费者
  3. 消费者的ACK 并且不接收更多的任务,直到ACK
  4. 队列认为消息处理完整

所以问题就在于两件事情:说“我可以接受更多的工作”,并说“我完成了这个任务。”问题是!我的消费机被配置为并行处理50个任务,每个任务需要约30秒。但是,如果一项任务悬而未决或者失败 - 需要重新递交。如何做到这一点?

回答

1

使用

channel.basicQos(prefetchCount); 

其中预取数=不承认我可以处理的任务数量。

记录例如here