使用EventMachine消耗表

时间:2012-12-10 17:56:28

标签: ruby eventmachine

我的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

任何帮助都将受到高度赞赏

2 个答案:

答案 0 :(得分:0)

这种方法的问题是你会触发每个每个重新发送在该范围内的调用,你将每隔五秒钟完成一次。至少,您需要将这些记录标记为正在处理,这样您就不会重复工作。如果处理其中任何一个花费的时间超过五秒,您将有重叠的呼叫。

您真正需要的是某种作业队列,例如beanstalkddelayed_job

答案 1 :(得分:0)

您需要更新数据库宝石的版本。他们通常有前缀em-。如果它是一个mongoDB,那就有'em-mongo'宝石。对于Mysql,我听到的最佳选择是mysql2 gem中的内置异步模块