3

Spring 統合の使用を開始していますが、可能であればこの状況を解決する方法がわかりません。

アプリケーションのサービスアクティベーターで発生する可能性のあるすべての例外を自動的に「キャッチ」し、このエラーを専用キューに送信したいと考えています。カスタムコードが必要なため、ゲートウェイはソリューションではありません。原則を正しく理解していれば、サービスアクティベーター要素を使用する必要があります。

私は次のようなものが大丈夫だと思った:

<jms:outbound-channel-adapter channel="errorChannel"
                                  connection-factory="jmsConnectionFactory" destination="oneErrorQueue"/>

それは機能していません。実際にエラーを挿入するために、Spring 統合で errorChannel が使用されているかどうかはわかりません。


ありがとう、それは動作するようです。

フローを開始するインバウンド コンポーネントのエラー チャネルをリッスンするトランスフォーマーを配置しました。サービス アクティベーターでエラーが発生すると、トランスフォーマーは MessagingException を取得します。問題は、このエラーがキューに届かないことです。コードを見てみましょう:

<jms:message-driven-channel-adapter
            channel="input-channel" concurrent-consumers="1"
            max-concurrent-consumers="3" connection-factory="jmsConnectionFactory"
            transaction-manager="jtaTransactionManager" destination="myQueue" error-channel="myErrorChannel"/>

<transformer input-channel="myErrorChannel" output-channel="create-error-channel" ref="errorTransporter" method="transform"/>

    <jms:outbound-channel-adapter channel="create-error-channel"
                                  connection-factory="jmsConnectionFactory" destination="creationErrorQueue" extract-payload="true"/>

...

そして変圧器:

public class ErrorTransporter {

    @Transformer
    public Message<CreateCustomerOrder> transform(MessagingException exception) {
        return (Message<CreateCustomerOrder>) exception.getFailedMessage();
    }
}

助けてくれてありがとう!

4

1 に答える 1

5

フローを開始する受信コンポーネントに error-channel 属性を追加します

error-channel="myErrorChannel"

アップストリーム コンポーネント (サービス アクティベーターによって呼び出されたサービスなど) が例外をスローすると、インバウンド コンポーネントはエラー チャネルにエラー メッセージを出力します。そのメッセージのペイロードは、次の 2 つのプロパティを持つ MessagingException です。

failedMessage
cause

したがって、エラーフローにトランスフォーマーを追加します...

<int:transformer input-channel="myErrorChannel"
    output-channel="toJmsChannel"
    expression="payload.failedMessage"

その後に、jms 送信チャネル アダプターが続きます。

于 2012-09-05T15:21:25.023 に答える