RoR处理消息队列中的消息

时间:2015-09-18 20:53:44

标签: ruby-on-rails cron docker amazon-sqs

这是我的设置:

一个dockerized环境,带有用于RoR后端和ReactJS前端的独立docker容器。我想将事件发布到AWS SQS队列,我想根据SQS中的messaged对MongoDB执行操作。 SQS已设置为跟踪两个不同存储桶上的事件,例如bin和bout。什么是e

事件流程:

  1. bin上有一个上传事件 - > Message1发布到SQS
  2. 接收器从SQS读取message1并决定执行action1 - > message2发布到SQS
  3. action1已完成 - > message3发布到SQS
  4. 接收方读取message3并决定更新Mongo以反映正在执行的操作。
  5. 我的问题:

    1. 我希望后端处理接收器,但我不确定如何开始实现这个,因为我不想在我的dockerized容器上运行cron作业,因为它看起来很痛苦({{ 3}})
    2. 此外,我计划在处理/阅读后删除这些消息。
    3. 有人可以让我对此有所了解吗? LMK,如果我需要绘制图表来解释流程。谢谢!

1 个答案:

答案 0 :(得分:0)

如果我理解正确的话,我不是100%,但是你想要实现的是简单的工作流程,而某些任务可能需要很长时间。您所要做的就是创建一个或多个Worker环境。这样的环境已经自动安装恶魔。这个恶魔从队列中获取消息并将其发送到应用程序的一个POST REST动作。如果您使用代码200响应该调用,它将从队列中删除消息。如果不是,它将重试几次并将消息发送到死信队列(如果已配置)。

因此,您必须在应用程序中开发一个或多个REST操作来处理您的消息(或创建许多应用程序)。如果您希望使用一个REST操作创建一个应用程序,那么您必须在消息中发送一些信息,它是什么类型(消息1,2,3),因为工作者只能有一个REST操作入口点。

队列数取决于您,您可以拥有一个包含所有消息类型和一个工作人员的队列,或者您可以拥有2-3个队列,每个队列都附加有工作者。它只取决于任务的性质。如果他们需要花费相同的时间来执行,并且您不希望更快地处理某些消息类型,那么我可能会使用一个队列和一个工作人员以及说出"我是类型1和#34;的消息。

可以使用不同的技术(java,nodejs,python,ruby,某些docker容器)创建worker,唯一的要求是应用程序有POST REST动作将消息发送到