2011-09-13 6 views
9

キャメルにおける例外処理が明示的にエラー処理の2つの「スコープ」扱い: キャメル - 「サブルート」

  • 私がいる問題ルート

  • あたり

    • グローバルに例外がスローされます「副経路」にある。例えば、私はこのルートを持っている:

      from("direct:sendToWebservice"). 
          .processRef("massageBeforeSending"). 
          .to("http://webservice.com"). 
          .processRef("massageResponse"); 
      

      それから私は、Webサービスにメッセージを送信する必要がある2つの他のルート持っている:私は起こるしたい何

      from(direct:fromSystemA"). 
          .errorHandler(deadLetterChannel("direct:TellSystemA")). 
          .to("direct:sendToWebservice"); 
      
      from(direct:fromSystemB"). 
          .errorHandler(deadLetterChannel("direct:TellSystemB")). 
          .to("direct:sendToWebservice"); 
      

      です、もしWebサービスルートは例外をスローし、呼び出し元に伝播し、システムAまたはシステムBのいずれかに通知されます。私はこれを達成する方法を見ていない。

      これは一般的な使用例だと思います。誰かが前にそれにぶつかっていますか?

      おかげで再びあなたの時間のために、

      ロイ

    答えて

    16

    が同僚からの回答を得た:subrouteは、それが無効になってエラー処理だ持​​っている必要があります:

    from("direct:sendToWebservice"). 
        .errorHandler(noErrorHandler())  // disables error handling for this route 
        .processRef("massageBeforeSending"). 
        .to("http://webservice.com"). 
        .processRef("massageResponse"); 
    

    これはエラーを伝播するラクダを強制的に呼び出し元のルートに移動します。

    関連する問題