我在我的项目中有一个模型重新发送,它包含内容和状态列。
使用EventMachine消耗状态为0的所有记录的最佳/最快方法是什么?
我想要创建一个简单的工作人员,它尝试每段时间用status==0查找记录(比如每隔5分钟)
我对EventMachine还不熟悉,也找不到很多如何处理DB的例子。
到目前为止,我做了如下内容,但不确定它是否是最佳实现:
$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任何帮助都将不胜感激。
发布于 2012-12-10 19:19:46
这种方法的问题是,您将触发该范围内的每一个新的调用,并且每5秒执行一次。至少,您需要将这些记录标记为正在处理,这样就不会重复工作。如果处理其中任何一个都需要超过5秒的时间,那么就会有重叠的调用。
您真正需要的是像贝斯塔尔德或工作这样的作业队列。
发布于 2012-12-11 04:09:00
您需要您的DB的偶发版本。他们通常有前缀em-。如果是mongoDB,就有‘他们-芒果’宝石。对于Mysql,我听说的最佳选择是在mysql2 gem中内置异步模块。
https://stackoverflow.com/questions/13806433
复制相似问题