扩展稍长的消费者工作 - RabbitMQ

时间:2018-04-20 06:00:53

标签: architecture rabbitmq message-queue amqp

我将RabbitMQ设计到我们的解决方案中,我很好奇如何有效地处理和确认消息,同时仍然执行"真实"消费者代码中的工作范围为5-10秒。 (比samples所研究的工作更多。)

enter image description here

以上是我打算处理的一个例子。我的twitter.tweet_cmd_q队列中的消息,其中包含消息正文中所需的所有参数,供消费者发出实际的Twitter API请求,并将这些结果保存到数据库中。

但是,我在这里遇到两个问题:

  1. 我每分钟处理数千条记录 - 在确认该消息之前,我可能需要5-10秒。是#"正常"消费者代码在确认消息之前处理所有需要的工作? (即我可以看到确认消息,并将实际工作放在另一个线程中进行处理。 - 尽管这需要它自己的形式"线程"管理这样系统确实承受了太大的负担。)
  2. RPC calls会对我有什么好处,在这种情况下需要查询数据并将其保存到数据库中吗?

  3. 处理这种可扩展性的最佳方法是创建更多用于循环处理的工作程序实例吗?

2 个答案:

答案 0 :(得分:3)

  1. 是的,消费者代码在执行此操作之前,通过消息执行所需的一切是正常的。这就是你如何管理其他员工的消息可见性。

  2. 不,保持简单,只需在工人身上做你需要做的事。

  3. 排序,它不是真正的循环,只是创建更多的工作人员,并让他们订阅队列。每个工作人员将轮询队列,查找消息并对其执行。

答案 1 :(得分:2)

RabbitMQ团队监控the rabbitmq-users mailing list,有时只回答StackOverflow上的问题。

Rob的答案很棒,我只想补充一点:

  

消费者代码在确认消息之前处理所有需要的工作是否“正常”?

如果您在处理之前确认该消息,并且您的消费者崩溃或无法完成其任务,则该消息将丢失。这是在你的工作完成时才开始的主要原因。您可以在此处找到相关文档:https://www.rabbitmq.com/confirms.html