如何处理轨道无限/无限过程

时间:2014-06-18 19:55:40

标签: ruby-on-rails amazon-sqs

我正在使用Amazon SQS队列,我有一个消耗队列消息的类。我试图尽可能接近实时消息,所以我需要消耗代码无休止地运行。队列中的消息将持续超过半天。

我遇到过一些无休止地解决这个问题的解决方案,我想知道是否有这种需求的最佳实践。

选项1

在Web服务器上使用delayed_job或sidekiq在后台连续运行该过程。

选项2

让一个单独的服务器有一个专用于使用消息的ruby应用程序。

选项3

将SQS使用者置于rake任务中并使用系统调用在后台触发任务。

非常感谢任何见解!

2 个答案:

答案 0 :(得分:5)

您可以使用shoryuken

它将持续消耗您的消息,直到您的队列有消息。

shoryuken -r your_worker.rb -C shoryuken.yml \
  -l log/shoryuken.log -p shoryuken.pid -d

答案 1 :(得分:1)

正如您可能已经发现的那样,没有一种明显的正确方法™来处理这类事情。这在很大程度上取决于您为每项工作所做的工作,应用程序和基础架构的大小,以及您对API,消息排队理念和架构的个人偏好。

那就是说,我可能会根据您的描述倾向于选项2。 Sidekiq和delayed_job不会说SQS,虽然你可以用类似sidekiq-sqs的东西教他们,但听起来你可能很快就会长大。除非您需要为您的工作人员提供Rails环境,否则您可以更好地将队列使用者分成不同的应用程序,这样只需通过启动更多进程就可以轻松地进行水平扩展。它还允许您进一步将工作人员与Rails应用程序分离,这可以使部署和管理更容易。

选项3是非首发IMO。你想要让一个守护进程运行来处理工作,如果rake必须在每个工作上加载你的环境,事情就会变得懒散。