2016-05-03 4 views
0

リモートodbcデータベースに接続し、データをフェッチしてローカルデータベースを更新するsidekiqワーカーがあります。今私は労働者を2人の労働者に分割しています。 1つはデータに接続してフェッチし、別のレコードはレコードを更新します。Sidekiq:オブジェクトをパラメータとして渡します。

接続は、パラメータとして2番目のワーカーに渡しているオブジェクト#<OCI8::Cursor:0x00000007703f30>を返します。

SecondWorker.perform_async({:odbc => connection}) 
私はそれを使用しようとした第二のワーカーで

def perform(options) 
    order_odbc = options['odbc'] 
end 

しかし、それは文字列オブジェクトとして扱います

"#<OCI8::Cursor:0x00000006bddf48>":String 

パラメータ内のオブジェクトを渡すための他の方法はありますか?

答えて

2

Sidekiq recommendsジョブの引数が単純なデータ型(stringintegerなど)として渡されること。

私の質問はあなたのビジネスルールと制約の中では選択肢ではないかもしれないと認識しています。「本当に第2のワーカーが必要ですか?

私は仕事をしているサービスまたは他のクラスでオプションを見るかもしれません。別の労働者を蹴散らすのではなく、 delay

# Inside First Worker 
SomeCoolClass.delay.method(params) 

、メソッドは非同期に処理されますと、私の経験では、私は(私が作業者に複雑なオブジェクト/データを渡されたときに、私が持っていた問題に対して)このようなシナリオでは、複雑なオブジェクトの問題を持っていませんでした。

私が言及したように、あなたのアプリケーションではうまくいかないかもしれませんが、私のユースケースで私がうまくいきましたように、提案を提供したいと思っていました。

+0

ありがとうございました。目標は、最初にサーバーに接続するときの最初の作業者の作業負荷を最小限に抑え、データを取り出してレコードを更新することです。だから、私は新しい労働者を始めようと考えました。 – Arif

+0

他のメソッド(「第2のワーカー」を表すコード)を非同期メソッドとして開始するため、ワーカー自身を解放します。私は、あなたがそのコードを第2の作業者に移すことから「利益」を得られるとは確信していませんが、間違っている可能性があります。非同期の「遅延」コールを使用することによって、作業者が移動するなど –

0

ハッシュでオブジェクトを変換できます。これは最善の方法ではありませんが、機能します。

さらに詳しい情報hereオブジェクトをハッシュに変換する。

関連する問題