2017-07-06 9 views
1

私は3つの異なるシステムを持っています。私はこれらのすべてのシステムでデータを同期させるためにSpring統合を使用しています。バネ統合のエラー処理

システム1つの通話HTTP経由--->システム2:インバウンドゲートウェイ

<int-http:inbound-gateway id="gateway" 
    path="/save" supported-methods="POST, PUT" 
    request-channel="requestChannel" reply-channel="replyChannel" 
    request-payload-type="com.model.Request" 
    mapped-request-headers="source" error-channel="errorChannel" /> 

システム2は、要求が他の有効な場合は、例外

<int:service-activator ref="serviceMethod" 
    method="saveIfValid" input-channel="requestChannel" 
    output-channel="serviceOutput" /> 

<int:recipient-list-router id="id1" 
    input-channel="serviceOutput"> 
    <int:recipient channel="system1" /> 
    <int:recipient channel="system3" /> 
</int:recipient-list-router> 
をスローレスポンスを返すデータを永続化するサービスメソッドを呼び出します

サービスが成功した場合にのみ、システム1とシステム3にサービスメソッドの応答を送信する必要があります。 サービスメソッドを呼び出すと、サービスメソッドの応答に基づいて、トランスフォーマーを使用してシステム3の要求が生成されます。変圧器の後に私は要求をmqキューに入れる。

<int:transformer id="transformer1" 
    method="convert" input-channel="system3" 
    output-channel="jmsInput"> 
    <bean 
     class="com.transformer.System3Transformer" /> 
</int:transformer> 


<int-jms:outbound-channel-adapter id="adapter" 
    channel="jmsInput" destination-name="queueName"> 
</int-jms:outbound-channel-adapter> 

更新JMSアウトバウンドコード

<int-jms:outbound-channel-adapter id="jms1" 
 
\t \t channel="jmsIn" destination-name="queueName"> 
 
\t \t <int-jms:request-handler-advice-chain> 
 
\t \t \t <bean 
 
\t \t \t \t class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice"> 
 
\t \t \t \t <property name="onSuccessExpression" value="T(Boolean).TRUE" /> 
 
\t \t \t \t <property name="successChannelName" value="afterSuccessDeleteChannel" /> 
 
\t \t \t  <property name="onFailureExpression" value="T(Boolean).FALSE" /> 
 
\t \t \t \t <property name="failureChannelName" value="afterFailRenameChannel" /> 
 
\t \t \t </bean> 
 
\t \t </int-jms:request-handler-advice-chain> 
 
\t </int-jms:outbound-channel-adapter>

サービスクラスは、私はエラー応答を送信し、

  • 流れを停止する必要が失敗した場合、私の質問は

    • です私fサービスメソッド成功した永続データですが、変換に失敗すると、システム1は正常に応答し、エラーを記録する必要があります。
    • ここでは、アウトバウンドアダプタでエラーチャネルを使用しているため、トランスにエラーが発生してもシステム1に返されます。
    • グローバルエラーチャネルを使用せずにエラーを処理する方法と、アダプタ。 HTTPレスポンスとしてシステム1に送られる流れが停止し、エラー -
      • は、あなたが本当にただの例外の伝播に依存しなければならない最初のケースでは、私のquesion
  • 答えて

    0

    に答えてくれてありがとう。

    第2(transformer)の場合、ExpressionEvaluatingRequestHandlerAdviceを調べ、<transformer>の場合は<request-handler-advice-chain>と一緒に使用してください。

    system1にご了承ください。<int-jms:outbound-channel-adapter>の場合も同様です。

    http://docs.spring.io/spring-integration/reference/html/messaging-endpoints-chapter.html#expression-advice

    https://github.com/spring-projects/spring-integration-samples/tree/master/intermediate/retry-and-more

    +0

    私の質問に答えていただきありがとうございます。 で何らかのエラーが発生した場合は、単にログに記録したいので、システム1にエラーを表示したくないのですか? –

    +0

    ' \t \t \t \t <プロパティ名=" onSuccessExpression」値= "ペイロード" /> \t \t \t \t <プロパティ名= "successChannelName" 値= "afterSuccessDeleteChannel" /> \t \t \t \t <プロパティ名= "onFailureExpression" 値= "ペイロード" /> \t \t \t \t <プロパティ名= "failureChannelName" 値= "afterFailRenameChannel" /> \t \t \t ' –

    +0

    上記のコードをご覧ください。成功チャネルと失敗チャネルの両方に行きます。それが成功か失敗かを評価する方法を説明してください。 。 –

    関連する問題