2016-11-14 7 views
0

これはアーキテクチャ上の疑問です。許可されていない場合は、質問を許可するように更新する方法についてアドバイスをお願いします。複数のwebジョブを介した通信としてServicebusを効率的に使用する方法

特定の順序で同じ情報を処理する7-8のWebジョブが実行されています。これをサービスバスで行うための好ましい方法は何ですか?このためにサービスバスを使用するのがベストプラクティスですか?

私はこのようなものでね現時点では: enter image description here

を参照してくださいEDIT、これは パケットは、当社のクライアントから入ってきた2つのジョブを通過した後、3に送信されますが変更されましたジョブは(必ずしもすべてが必要なわけではなく、彼らは仕事を共有しています。)いくつかのパケットはFacebookに、いくつかはFTPに、そしていくつかは両方に送られます。 3つのジョブが提供する情報

状態をデータベースに書き込むことができますが、具体的にはservicebusに切り替えて作業しますパケットとのトランザクション、クラッシュなどで簡単に回復することができます。

また、最良の方法は、4つの異なるサービスバスまたは1つのバス(もし可能であれば)でも同じパケットを状態フィールドで再キューしますか?たとえば、状態フィールド「Job1 = OK」を追加し、ジョブ2はそのフィールドにサブスクリプションを持ち、ジョブ1を渡すとパケットを取得します。これは理想的なことです。パケットが最後まで残っているので、サービスバスへのトラフィックも減るでしょう。

何らかの検索の後、メッセージを転送することができましたが、同じトピックに転送することもできます?それにデータを追加できますか?私がメッセージを転送すると、それは価格設定の余分なメッセージとしてカウントされますか?

EDIT:これまでの流れを更新:

enter image description here

だから、もう3つのジョブを待つ必要はありません。 1つのジョブは、明らかに待っている必要はなく、残りの2つは結合されています。

答えて

1

私は少し違うでしょう。

  • なぜ異なるキューを使用しないのですか?たとえば、Step1、Step2、Step3など(より良い命名をする必要があります)。そして、ウェブの仕事にあなたは私はあなたが

  • マージwebjobsに1 webjobをデシリアライズすることを求めることができ思い出すとすぐに、私はので、私は、サービス・バスでJSONを送信しています記憶域キューを使用していますハンドラ

    public static void ProcessJob1([QueueTrigger("Job1")] CloudQueueMessage data, CancellationToken token){ 
        var message = data.AsString; 
        //process event 
        //Send event for next job2 
    } 
    
        public static void ProcessJob2([QueueTrigger("Job2")] CloudQueueMessage data, CancellationToken token){ 
        var message = data.AsString; 
        //process event 
        //Send event for next job3 
    } 
    
    ..... 
    
  • を作成することができますし、いくつかのイベントがより多くのリソースを使用する可能性があるため、リソースを適切に使用することを意味します。

  • ステップ2を完了するとリダイレクトする必要はありません。もう1つのイベントを他のキューに送信して、 。また

あなたはother approachthis linkを確認することができますが、それはあなたがそれを分割する理由は、トランザクションに行くことができるようにほとんどであるビット

+0

をアプリリライトする必要があります。たとえばジョブ1はビデオ処理ジョブで、ジョブ2はFacebookブック共有です。ジョブ3はそのFacebookブックシェアを郵送しています.1つのジョブですべてをマージすると、再び状態をデータベースに保存してクラッシュ時に再びピックアップする必要があります。私たちはデータベースに絶えず書いていることから離れ、私が考えるベスト・アプローチではないサービス・バスのトランザクション・アイデアを使用したいからです。しかし、3つの「分割された」ジョブは現在統合されています。 – Lonefish

+0

@Lonefishその1つの仕事だが、内部に別のプロセッサがあるので、技術的には少し変わるだろう。 –

+0

@Lonefishしたがって、次のジョブイベントを送信する必要がある処理イベントの最後に、3つの静的メソッドProcessJob1([QueueTrigger( "Job1")])、ProcessJob2([QueueTrigger( "Job2")]) –

関連する問題