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();
}
}
助けてくれてありがとう!