我很困惑我应该在哪里有一个脚本在Rails应用程序中轮询Aws Sqs。
如果我在Web应用程序中使用一个线程,它可能会使用cpu周期来永久监听此队列,然后影响性能。
如果我保留一个单独的heroku工作者dyno,每月花费34.50美元。为单个队列调查支付这个价格是否有意义?或者不是使用工人的情况呢?
脚本代码:
它的作用:收听已转换的pdf文件。获取响应并将对象创建到postgres数据库中。
queue = AWS::SQS::Queue.new(SQSADDR['my_queue'])
queue.poll do |msg|
...
id = received_message['document_id']
@document = Document.find(id)
@document.converted_at = Time.now
...
end
我需要帮助!!感谢
答案 0 :(得分:4)
您有三个基本选项:
fork
子进程进行后台处理。无论发生什么,请记住dyno消耗的512 MB RAM限制,并且由于我假设您只有一个web dyno,请注意dyno idling表示您的应用可能不会全天候运行。此外,这个选项闻起来很糟糕,因为它通常违背了12-factor app的精神。rake handle_sqs
任务,用于处理队列并在空闲时退出。 Heroku Scheduler是理想的:让它每20分钟运行一次或什么的。只要它运行,你就会为一次性dyno支付费用,但是如果队列是空的,那么只有几秒钟,它的成本低于一个永远在线的工作人员。或者,您的Web应用程序可以使用Heroku API启动一次性过程,以编程方式运行等效的heroku run rake handle_sqs
。