0

Ruby プロジェクトにモデルResendがあり、コンテンツとステータスの列が含まれています。

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

どんな助けでも大歓迎です

4

2 に答える 2

0

このアプローチの問題は、そのスコープ内のすべての再送信に対して呼び出しをトリガーし、5 秒ごとにそれを行うことです。少なくとも、これらのレコードに処理中のフラグを立てて、労力が重複しないようにする必要があります。これらのいずれかの処理に 5 秒以上かかる場合は、呼び出しが重複しています。

本当に必要なのは、beanstalkd やdelayed_job のようなある種のジョブキューです

于 2012-12-10T19:19:46.967 に答える