【问题标题】:RoR Processing messages off an Message QueueRoR 处理消息队列中的消息
【发布时间】:2015-12-16 03:00:09
【问题描述】:
这是我的设置:
一个 dockerized 环境,具有用于 RoR 后端和 ReactJS 前端的单独 docker 容器。我想将事件发布到 AWS SQS 队列,并且我想根据 SQS 中的消息对 MongoDB 执行操作。 SQS 已设置为跟踪 bin 和 bout 两个不同存储桶上的事件。什么是e
事件流程:
- bin 上有一个上传事件 -> Message1 发布到 SQS
- 接收者从 SQS 中读取 message1 并决定执行 action1 -> message2 发布到 SQS
- action1 完成 -> message3 发布到 SQS
- 接收方读取 message3 并决定更新 Mongo 以反映正在执行的此操作。
我的问题:
- 我希望后端负责接收器,但我不确定如何开始实现它,因为我不想在我的 dockerized 容器上运行 cron 作业,因为这看起来很痛苦 (@987654321 @)
- 我还计划在邮件处理/阅读后将其删除。
谁能告诉我这个问题? LMK 如果我需要绘制图表来解释流程。谢谢!
【问题讨论】:
标签:
ruby-on-rails
cron
docker
amazon-sqs
【解决方案1】:
如果我理解正确,我不是 100%,但您试图实现的是简单的任务工作流程,其中某些任务可能需要很长时间。您所要做的就是创建一个或多个 Worker 环境。这样的环境已经自动安装了恶魔。该恶魔从队列中获取消息并将其发送到您的应用程序的一个 POST REST 操作。如果您使用代码 200 响应该呼叫,它将从队列中删除消息。如果不是,它将重试几次并将消息发送到死信队列(如果已配置)。
因此,您必须在您的应用程序中开发一个或多个 REST 操作来处理您的消息(或创建许多应用程序)。如果您想用一个 REST 操作创建一个应用程序,那么您必须在消息中发送一些信息它是什么类型(消息 1、2、3),因为工作人员只能有一个 REST 操作入口点。
队列数量由您决定,您可以有一个包含所有消息类型的队列和一个工作人员,或者您可以有 2-3 个队列,每个队列都附加工作人员。它只取决于任务的性质。如果他们需要类似的时间来执行并且您不想比我可能会使用一个队列和一个工作人员以及说“我是类型 1 的消息”的消息更快地处理某些消息类型。
可以使用不同的技术(java、nodejs、python、ruby、一些 docker 容器)创建工作器,唯一的要求是应用程序具有将发送消息的 POST REST 操作