2016-06-15 5 views
0

A, B, C, Dという名前のjobsがあります。ジョブBは、ジョブAが完了した後に開始する必要があります。したがって、仕事の順序は、A->B->C->Dのようになります。rabbitMQに一連のジョブを送信する方法はありますか?

私はABCおよびDの労働者の数を無制限に縮尺したいと思います。 RabbitMQを使用してこれを実装する方法はありますか、基本的にはseriesjobsに作成する方法を探しています。

私の現在の設計は、次のようになります。

  1. callerプロセスがseriesOfJobs作成:ジョブA,B,C,Dを記述JSONの配列が
  2. callerを経由seriesManager(別のプロセス)にseriesOfJobsを送るJSON-RPCプロトコルを使用してRabbitMQRPCmainCallbackQueue
  3. seriesManager構文解析seriesOfJobsRabbitMQRPC介しworkerA(別のプロセス)にジョブAを送信しcallbackQueueA
  4. workerA行うジョブAにコールバックを待ちとcallbackQueueAからのコールバックを取得し、作業者にジョブBを送信seriesManagerseriesManager
  5. callbackQueueAを介して通知し、コールバックを待ち、ジョブの場合は同じC、次に同じジョブの場合はD

  6. seriesManagerは、ジョブがA,B,C,D終了していることを知っている - それはここRabbitMQ RPC tutorial説明するように、私はRPCの概念を使用していますmainCallbackQueue

経由callerを通知し、これを行うための簡単な方法はありますか?

答えて

1

(私が必要なものに固執し、それを試してみて、編集しますけれども残念ながら、私がコメントするのに十分な評判を持っていないので、私は要件を明確にすることができないとして、これはやや欠けて答えてもよい)

seriesManagerは絶対に必要ですか?

workerAworkerBのジョブBを作成し、その上などではなく、一貫中央ハブにコールバックするよりも、持っているより論理的かもしれません。

その場合、あなたの現在の設計は、に変更します

  1. callerseriesOfJobsを作成します。
  2. callerは、seriesOfJobsからworkerAを送信します。
  3. workerAは、ジョブAを実行し、残りのseriesOfJobsworkerBに送信します。
  4. workerBは、ジョブBを実行し、残りのseriesOfJobsworkerCに送信します。
  5. workerCは、ジョブCを実行し、残りのseriesOfJobsworkerDに送信します。
  6. workerDは、ジョブDを実行し、mainCallbackQueueを介してcallerに通知します。

私は、より単純な方法として、その厄介な中心的なハブを方程式から取り除くと考えています。

+0

提案したデザインは、現在作業中のプロジェクト(現在取り組んでいるプロジェクト)と似ています。 1)すべてのスマートが1つの場所にあり、「ワーカー」がただ単に「要求」された応答エンドポイントである2)ジョブBが失敗した場合、セントラルハブはジョブを中止することができます。 C/D'を呼び出し、 'caller'に通知します –

+0

私はすべての' smarts'を 'workers'が使うライブラリにエクスポートすることができます...私はどのアプローチが良いかを知るのに十分な経験はありません:) –

+0

また、 'シリーズ'だけでなく 'パラレル'も - しかし、それは複雑さ(コールバックのための追加のキューなど)を導入することは認めています –

関連する問題