Scaling scaling slightly long 运行 消费者工作 - RabbitMQ
Scaling slightly long running Consumer work - RabbitMQ
我正在将 RabbitMQ 构建到我们的解决方案中,我很好奇如何有效地处理和确认消息,同时仍在消费者代码中执行 "real" 工作,时间范围为 5-10 秒. (比 samples 曾经深入研究的工作更多)。
以上是我打算处理的示例。我的 twitter.tweet_cmd_q
队列中的一条消息具有消息正文中所需的所有参数,供消费者发出实际的 Twitter API 请求,并将这些结果保存到数据库中。
但是,我 运行 遇到两个问题:
- 我将每分钟处理数千条记录 - 我不可能花 5-10 秒的时间来确认该消息。是否 "normal" 消费者代码在确认消息之前处理所有需要的工作? (即我可以看到 ack'ing 消息,并将要完成的实际工作扔到另一个线程中进行处理。-尽管这将需要它自己的 "thread" 管理形式,以便系统确实承受太多负载).
在这种涉及查询数据并将其保存到数据库的情况下,RPC calls 对我有什么好处吗?
处理这种可扩展性的最好方法是创建更多的工作实例用于循环处理吗?
是的,消费者代码在确认消息之前对消息执行所有需要的操作是正常的。这就是您如何管理消息对其他工作人员的可见性。
不,保持简单,只做你需要做的工作。
有点,这不是真正的循环,只是创建更多的工人,让他们订阅队列。每个工作人员将轮询队列、查找消息并对其执行。
RabbitMQ 团队监控 the rabbitmq-users
mailing list 并且有时只在 Whosebug 上回答问题。
Rob 的回答很好,我只想补充一点:
Is it "normal" for the consumer code to process all the needed work before acknowledging the message?
如果您在处理消息之前确认该消息,并且您的使用者崩溃或未完成其任务,则该消息将丢失。这是仅在您的工作完成时才确认的主要原因。您可以在此处找到相关文档:https://www.rabbitmq.com/confirms.html
我正在将 RabbitMQ 构建到我们的解决方案中,我很好奇如何有效地处理和确认消息,同时仍在消费者代码中执行 "real" 工作,时间范围为 5-10 秒. (比 samples 曾经深入研究的工作更多)。
以上是我打算处理的示例。我的 twitter.tweet_cmd_q
队列中的一条消息具有消息正文中所需的所有参数,供消费者发出实际的 Twitter API 请求,并将这些结果保存到数据库中。
但是,我 运行 遇到两个问题:
- 我将每分钟处理数千条记录 - 我不可能花 5-10 秒的时间来确认该消息。是否 "normal" 消费者代码在确认消息之前处理所有需要的工作? (即我可以看到 ack'ing 消息,并将要完成的实际工作扔到另一个线程中进行处理。-尽管这将需要它自己的 "thread" 管理形式,以便系统确实承受太多负载).
在这种涉及查询数据并将其保存到数据库的情况下,RPC calls 对我有什么好处吗?
处理这种可扩展性的最好方法是创建更多的工作实例用于循环处理吗?
是的,消费者代码在确认消息之前对消息执行所有需要的操作是正常的。这就是您如何管理消息对其他工作人员的可见性。
不,保持简单,只做你需要做的工作。
有点,这不是真正的循环,只是创建更多的工人,让他们订阅队列。每个工作人员将轮询队列、查找消息并对其执行。
RabbitMQ 团队监控 the rabbitmq-users
mailing list 并且有时只在 Whosebug 上回答问题。
Rob 的回答很好,我只想补充一点:
Is it "normal" for the consumer code to process all the needed work before acknowledging the message?
如果您在处理消息之前确认该消息,并且您的使用者崩溃或未完成其任务,则该消息将丢失。这是仅在您的工作完成时才确认的主要原因。您可以在此处找到相关文档:https://www.rabbitmq.com/confirms.html