2012-03-08 4 views
5

私はpostgresマルチテナント環境を作成しています。 クライアントAにはschema_1、Bにはschema_2などがあります。即座にresqueキューを作成することができます

私はすべてのクライアントを知っていませんので、データに基づいて新しいスキーマを作成するための簡単な小さな作業がありますテナントテーブル..すべて完全にダイナミック:新しいクライアントを追加し、新しいテナントを追加し、レーキテナントを実行します。db:migrate .. tadaすべてのテーブルがあり、クライアントには小さな世界があります。 (不明なお客様リストですが、登録時のレーキは問題ではありません)

いいえ...
バックグラウンドジョブを除きます。
クライアントごとに異なるキューが必要です。

http://blog.kabisa.nl/2010/03/16/dynamic-queue-assignment-for-resque-jobs/は、依然としてハードコーディングされたキューを使用します。あなたがコードを書いたときにあなたが知っていた2つの間を選ぶことができますが、まだまだ動的ではありません。

だから私の質問です。 私のクライアントの世界を表す文字列 "tenant_1"があります。
"him"のみのジョブを含むキューを作成するには、この文字列をどのように使用できますか。
どのようにして実際の動的キューを作成できますか?

答えて

4

Resque :: Job.create( "client#{client_id}"、MyWorker、3);

これは私たちのために働いています。

+2

これらのキューは、終了後どのように削除しますか?クライアントの1000個のキューを持つのが問題ではなく、その50%がアイドル状態です – Luccas

8

誰かが私のようにこの質問に出くわすと、ソースの中に答えが見つかりました。

Resqueバージョン1.x(stable)はこれを/lib/resque.rbに記載しており、Resque内のJobモジュールに直接アクセスするよりも、より良い方法のように見えます。

# This method is considered part of the `stable` API. 
    def enqueue_to(queue, klass, *args) 

このように使用すると、完璧に機能します。

Resque.enqueue_to(:my_queue, MyWorker, :my_argument) 
関連する問題