【发布时间】:2017-05-16 17:09:36
【问题描述】:
我有一个要求,我必须不断地从 AWS-SQS(简单队列服务)获取消息并更新模型的相关记录。该消息包含需要在获取后立即作为通知显示给相关用户的数据。这已通过使用 Action Cable 成功管理。我创建了一个 rake 任务,它从队列中获取消息并进行所需的处理。该任务应该在无限循环中运行。我有 2 个问题?
namespace :sqs_consumer do
desc 'Get data from the AWS-SQS and process it.'
task start: :environment do
# initialize the sqs client
loop do
#read the queue for messages and process them in batches(if any)
end
end
end
1) 为上述需求创建一个 rake 任务是否正确?无限运行的 rake 任务是正确的方法吗?如果没有,什么是正确的方法。我无法定期运行任务,因为我需要实时数据。
2) 我想监控任务。我正在使用monit。不幸的是,同样的 Monit conf 似乎不起作用。我做错了什么或错过了什么?
check process aws_sqs_consumer with pidfile /var/www/myproject/shared/pids/sqs_consumer.pid
start program = "/bin/sh -c 'cd /var/www/myproject/current; nohup bundle exec rake sqs_consumer:start RAILS_ENV=staging -i 0 -P /var/www/myproject/shared/pids/sqs_consumer.pid >> log/sqs_consumer.log 2>&1 &'" as uid ubuntu and gid ubuntu
stop program = "/bin/sh -c 'kill $(cat /var/www/myproject/shared/pids/sqs_consumer.pid)'" as uid ubuntu and gid ubuntu
【问题讨论】:
-
你可以尝试使用守护进程 gem 来创建一个守护进程并使用上帝来监控它:)
标签: ruby ruby-on-rails-5 infinite-loop rake-task monit