5

現在、JRuby で Resque を使用しており、開発時にワーカーを開始する 2 つの方法を使用しています。

  • レーキの使用:
QUEUE=* jruby -J-cp /path/to/library -S rake environment resque:work
  • プログラムで、Sinatra Rack App (または何でも) を介して初期化され、最終的に次のクラスを呼び出します。

def start
   @worker = Resque::Worker.new(@queues)
   @worker.verbose = @vervose
   @worker.work(@interval)
end

def stop
   @worker.try(:shutdown)
end

これらのソリューションは両方とも、開発中は受け入れられます。たとえば、Tomcat にデプロイした場合にこれがどのように機能するかが心配です。

Ruby では通常、ワーカーを生成またはデーモン化してから、監視ツールを使用して pid を監視します。

デプロイ時にワーカーをプログラムで開始することは理にかなっていますか? javaで新しいスレッドを開始するか、jrubyプロセスを乱雑にするかどうか疑問に思っています.使用しない場合は、クォーツのような別のスケジューリングライブラリを使用してワーカーを開始しますか? またはデプロイタスクで起動するレーキタスク?

Worker モデルを作成して、データベース内のワーカーを追跡することもできますが、それは私には意味がありません。

ヘルプや知識をいただければ幸いです。

ありがとうございました。

参照:

https://github.com/defunkt/resque

http://rubydoc.info/github/defunkt/resque/master/Resque/

http://blog.thomasmango.com/post/636319317/resque-in-production

https://gist.github.com/486161

4

2 に答える 2

0

1年以上遅れていますが、あなたが探していた答えは、(ネイティブ)Javaスレッドでアプリケーションと一緒にResqueワーカーを実行することだと思います。JRuby :: Rackを使用しているので、答えはJRuby :: Rack::Workerです。これをweb.xmlに追加します:

<context-param>
  <param-name>jruby.worker</param-name>
  <param-value>resque</param-value>
</context-param>
<!--
<context-param>
  <param-name>QUEUES</param-name>
  <param-value>mails,posts</param-value>
</context-param>-->

<listener>
  <listener-class>org.kares.jruby.rack.WorkerContextListener</listener-class>
</listener>

ワーブルしている場合は、web.xml.erbサンプルhttps://github.com/kares/jruby-rack-workerがあります。config/ web.xml.erbファイルを作成し、それにコンテンツをコピーします...たまたまTrinidadを使用すると、その上に拡張機能が構築されます(したがって、web.xmlをセットアップして.jarファイルをコピーする必要はありません)。

于 2012-10-31T13:05:52.853 に答える
0

Usingrake resque:workは、Rails 環境を起動し、1 つのワーカーを開始します。このワーカーは、ジョブをポーリングし、(サブ) ワーカー プロセスに自分自身を fork し、そのジョブを処理してから終了します。

複数のワーカーを実行する場合は、次のCOUNT変数を使用します。

QUEUE=* COUNT=5 jruby -J-cp /path/to/library -S rake environment resque:work

これのどの側面が Tomcat に展開されますか? これはすべてコマンドラインです。

于 2011-07-12T02:52:30.267 に答える