1

このような同じサービスで次々に実行される2つのカスタムアクションがあります

<actions mep="RequestResponse">
    <action name="ActionA" class="ClassA"/>
    <action name="ActionB" class="ClassB"/>
</actions>

ActionA が受信したメッセージに対していくつかの検証を行うとします。検証でメッセージが無効であることが判明した場合、その失敗について呼び出し側にどのように応答しますか?

今私のアクションでは、ActionA のメッセージに応答を設定し、ActionA でエラーが見つかったことを示すマークをその中に入れ、ActionB はコードを実行する前にそのマークをチェックします。この方法は便利ですが、私のすべてのアクションは次のものから始めなければならないため、負担が大きいことがわかりました。

if (!markIspressent) {
    //Code goes here
}
return message.

ActionA で応答メッセージを設定し、戻っnullてパイプラインを停止しようとしましたが、うまくいきません。また、私が見つけた別の方法を試してみましたActionProcessingFaultException(message,"SomeTextGoesInHere")が、それもうまくいきません。この 2 番目の問題の主な問題は、ESB がその例外をスローしたメッセージを再処理しようとし、ESB があきらめて送り返すまで、メッセージに設定した応答が表示されないことです。しかし、そのあきらめには最大60秒かかります。

私の質問は、サービス パイプラインの最後に到達する前に、応答メッセージを呼び出し側に送信する方法です。

ありがとう

4

1 に答える 1

3

パイプラインを早期に終了するオプションは次のとおりです。 - null を返します。- サービスを 3 つに分割します (サービス 1 は OneWay であり、アクションの結果に基づいて適切なサービスにルーティングされることに注意してください) サービス 1

<actions mep="OneWay">
    <action name="ActionA" class="ClassA"/>
    <action name="ActionA1" class="RouteBasedOnMsgContentTo(Service 2 or Service 3)"/>
</actions>

サービス 2

<actions mep="RequestResponse">
    <action name="ActionB" class="ClassB"/>
</actions>

サービス 3

<actions mep="RequestResponse">
    <action name="ActionC" class="ClassC-SimplyRespondsTheProblem"/>
</actions>
于 2012-06-08T12:48:13.813 に答える