Architecture 扩展稍微长时间运行的用户工作-RabbitMQ

Architecture 扩展稍微长时间运行的用户工作-RabbitMQ,architecture,rabbitmq,message-queue,amqp,Architecture,Rabbitmq,Message Queue,Amqp,我正在将RabbitMQ构建到我们的解决方案中,我很好奇如何有效地处理处理和确认消息,同时还在5-10秒的消费者代码中执行“真实”工作。(比以往任何时候都要投入更多的工作) 以上是我打算处理的一个例子。我的twitter.tweet\u cmd\u q队列中的一条消息,该消息包含消息正文中所需的所有参数,供消费者发出实际的twitter API请求,并将这些结果保存到数据库中 然而,我在这里遇到了两个问题: 我一分钟要处理数千条记录——我不可能花5-10秒的时间才能确认这条消息。消费者代码在确

我正在将RabbitMQ构建到我们的解决方案中,我很好奇如何有效地处理处理和确认消息,同时还在5-10秒的消费者代码中执行“真实”工作。(比以往任何时候都要投入更多的工作)

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

然而,我在这里遇到了两个问题:

  • 我一分钟要处理数千条记录——我不可能花5-10秒的时间才能确认这条消息。消费者代码在确认信息之前处理所有需要的工作是否“正常”?(也就是说,我可以看到确认消息,并将要完成的实际工作扔到另一个线程中进行处理。-尽管这将需要它自己的“线程”管理形式,以便系统承受太多的负载)
  • 在这种涉及查询数据并将其保存到数据库的情况下,我会从中受益吗

  • 处理这种可伸缩性的最佳方法是创建更多工作实例进行循环处理吗

  • 是的,消费者代码在确认消息之前对消息执行所需的所有操作是正常的。这就是如何管理消息对其他工作人员的可见性

  • 不,保持简单,只是在工作中做你需要做的事情

  • 有点,这不是真正的循环,只是创建更多的工人,让他们订阅队列。每个工人将轮询队列、查找消息并对其执行操作

  • 是的,消费者代码在确认消息之前对消息执行所需的所有操作是正常的。这就是如何管理消息对其他工作人员的可见性

  • 不,保持简单,只是在工作中做你需要做的事情

  • 有点,这不是真正的循环,只是创建更多的工人,让他们订阅队列。每个工人将轮询队列、查找消息并对其执行操作


  • RabbitMQ团队监视并仅有时回答有关StackOverflow的问题


    Rob的回答很好,我只想补充一点:

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


    如果您在处理消息之前确认该消息,并且您的消费者崩溃或没有完成其任务,则该消息将丢失。这是在工作完成后才确认的主要原因。您可以在此处找到相关文档:

    RabbitMQ团队监视并有时只回答有关StackOverflow的问题


    Rob的回答很好,我只想补充一点:

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


    如果您在处理消息之前确认该消息,并且您的消费者崩溃或没有完成其任务,则该消息将丢失。这是在工作完成后才确认的主要原因。您可以在此处找到相关文档:

    谢谢,验证后感觉很好。查看RabbitMQ关于“工人队列”的教程,似乎创建更多工人是在这些情况下处理规模的方法。()谢谢你,验证这个感觉很好。查看RabbitMQ关于“工人队列”的教程,似乎创建更多工人是在这些情况下处理规模的方法。()