Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何处理rails无止境/无限过程_Ruby On Rails_Amazon Sqs - Fatal编程技术网

Ruby on rails 如何处理rails无止境/无限过程

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

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

我遇到了一些解决方案来无休止地运行它,我想知道是否有一个最佳实践来满足这种需求

选择1

在web服务器上,使用delayed_job或sidekiq在后台连续运行进程

选择2

有一个单独的服务器,有一个专门用于消费消息的ruby应用程序

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的集成,它也相对有效。