0

メッセージ キューに RabbitMQ を使用して、iPhone アプリ用に Ruby と Sinatra を使用して簡単なレシピ検索エンジンを構築しています。バックグラウンド プロセスのさまざまな実装の選択肢を探していますが、それらのほとんどは、カスタム メッセージ キュー アルゴリズムを実装するか、Rails プラグインとして動作します。

RabbitMQ とうまく連携する、フレームワークにとらわれない高品質のワーカー ライブラリに関しては、何がありますか?

そして、明らかなことを超えて、ワーカーコードを書くときに心に留めておくべきベストプラクティスはありますか?

# BAD, don't do this!
begin
  # work
rescue Exception
end
4

3 に答える 3

1

私は Beanstalk を使用しており、daemons gemを使用して独自のデーモンを作成しました。デーモン キットは新しいプロジェクトですが、キュー ループはまだ実装されていません。必要に応じてNaniteを確認することもできます。これはフレームワークに依存しません。

于 2009-05-27T14:06:13.637 に答える
1

私は制御不能なヤクの毛刈りの発作で、自分のライブラリを作成することになりました。デーモン キットは正しい一般的なアイデアでしたが、私のニーズには重すぎました。デーモンごとに完全な Rails アプリのように見えるものは必要ありません。最終的に少なくとも 3 つのデーモンが存在することになり、それはディレクトリの巨大な混乱になるでしょう。Daemons gem には恐ろしい API があり、それを抽象化したくなりましたが、フォークを自分で管理する方がおそらく簡単であることに気付いたので、そうしました。

API は次のようになります。

require "rubygems"
require "chaingang"

class Worker
  def setup
    # Set up connections here
  end

  def teardown
    # Tear down connections here
  end

  def call
    # Do some work
    sleep 1
  end
end
ChainGang.prepare(Worker.new)

そして、付属のrakeタスクを使用して、開始/停止/再起動またはステータスを確認します. Rack プレイブックから 1 ページを引用しました。このcallメソッドを実装するものはすべて、ChainGang.prepare および ChainGang.work メソッドの引数としてフェア ゲームであるため、aProcは有効なワーカー オブジェクトです。

他のものを使用するよりも構築に時間がかかりましたが、長期的には報われるのではないかと漠然とした疑いがあります.

于 2009-05-29T18:01:46.470 に答える
0

nanite(Rubyで書かれている)をチェックしてください。これはrabbitmqの上に書かれた若いプロジェクトです。

github.com/ezmobius/nanite/tree/master

于 2009-05-30T05:20:05.650 に答える