我的Ruby项目中有一个模型重新发送,它包含内容和状态列。
使用EventMachine消耗状态为0的所有记录的最佳/最快方法是什么?
我想创建一个简单的工作程序,试图在每个句点(每5分钟)找到状态== 0的记录
我还是EventMachine的新手,找不到如何处理数据库的例子。
到目前为止,我做了类似下面的内容但不确定它是否是最佳实现:
$ROOT_PATH ||= File.expand_path("#{File.dirname __FILE__}")
require "rubygems"
require 'eventmachine'
require 'em-http'
require "#{$ROOT_PATH}/app/models/resend.rb"
EventMachine.run do
EM.add_periodic_timer(5) do
Resend.active.each do |msg|
http = EventMachine::HttpRequest.new($RECEIVER_URL).post :body => {:message => msg.content }
http.callback { msg.update_status! }
end
end
end
任何帮助都将受到高度赞赏
答案 0 :(得分:0)
这种方法的问题是你会触发每个每个重新发送在该范围内的调用,你将每隔五秒钟完成一次。至少,您需要将这些记录标记为正在处理,这样您就不会重复工作。如果处理其中任何一个花费的时间超过五秒,您将有重叠的呼叫。
您真正需要的是某种作业队列,例如beanstalkd或delayed_job。
答案 1 :(得分:0)
您需要更新数据库宝石的版本。他们通常有前缀em-。如果它是一个mongoDB,那就有'em-mongo'宝石。对于Mysql,我听到的最佳选择是mysql2 gem中的内置异步模块