Ruby on rails 如何处理rails无止境/无限过程
我正在使用AmazonSQS队列,我有一个类使用队列上的消息。我试图让消息尽可能接近实时地被消费,所以我需要无休止地运行消费代码。队列上的消息将持续超过半天 我遇到了一些解决方案来无休止地运行它,我想知道是否有一个最佳实践来满足这种需求 选择1 在web服务器上,使用delayed_job或sidekiq在后台连续运行进程 选择2 有一个单独的服务器,有一个专门用于消费消息的ruby应用程序Ruby on rails 如何处理rails无止境/无限过程,ruby-on-rails,amazon-sqs,Ruby On Rails,Amazon Sqs,我正在使用AmazonSQS队列,我有一个类使用队列上的消息。我试图让消息尽可能接近实时地被消费,所以我需要无休止地运行消费代码。队列上的消息将持续超过半天 我遇到了一些解决方案来无休止地运行它,我想知道是否有一个最佳实践来满足这种需求 选择1 在web服务器上,使用delayed_job或sidekiq在后台连续运行进程 选择2 有一个单独的服务器,有一个专门用于消费消息的ruby应用程序 shoryuken -r your_worker.rb -C shoryuken.yml \ -l
shoryuken -r your_worker.rb -C shoryuken.yml \
-l log/shoryuken.log -p shoryuken.pid -d
选择3
将SQS使用者放置在rake任务中,并使用系统调用在后台启动该任务
任何洞察都将不胜感激 正如你可能已经发现的,没有一个明显的正确的方法™来处理这种事情。这在很大程度上取决于您为每项工作所做的工作、应用程序和基础结构的大小,以及您对API、消息队列原理和体系结构的个人偏好 也就是说,根据你的描述,我可能倾向于选择2。Sidekiq和delayed_job不会说SQS,虽然你可以教他们一些类似的东西,但听起来你可能会很快就超过他们。除非您需要工作人员可以使用Rails环境,否则您最好将队列使用者划分为不同的应用程序,这使得只需启动更多进程就可以轻松地进行水平扩展。它还允许您进一步将workers与Rails应用程序分离,从而使部署和管理更加容易 选项3是一个非初学者IMO。您需要运行一个守护进程来处理传入的作业,如果rake必须在每个作业上加载您的环境,那么事情就会变得缓慢。您可以使用 它将持续使用您的消息,直到您的队列中有消息为止
shoryuken -r your_worker.rb -C shoryuken.yml \
-l log/shoryuken.log -p shoryuken.pid -d
我想对此发表评论,因为我已经使用shoryuken一段时间了。通过shoryuken进行的SQS消息处理是可靠的,可以处理SQS涉及的所有脏活。使用delay=0选项允许我们接近实时地处理队列。还有一个与capistrano的集成,它也相对有效。