1

バックグラウンド:

以下に示すように、Spring XML 構成で記述された Spring Integration アダプターがあります。エラー処理に関するすべてのシナリオで完全に機能しています。エラー処理で行うことは、エラー メッセージをキューに書き込むことだけです。ここで、この xml 構成を DSL に変換する必要があります。以下のコードを使用してこれを変更しました。

問題:

「inputChannel」チェーン内でエラーが発生するたびに、エラー処理で検査を行い、エラーをエラー キューに書き込み、ペイロードを再試行しないようにしました。Spring XML は必要なことを正確に実行していますが、エラー メッセージをエラー キューに配置した後に DSL に変更すると、ペイロードが入力キューに書き戻され、キューからのエラー メッセージが消え、これが決して終わらないループに入ります。 .

私たちが行った分析:

エラー メッセージがエラー キューに書き込まれた後、エラーは発生せず、DSL アダプタ構成には処理するものが何もありません。

これを解決するためのヘルプ/指示は大歓迎です。

作業用 Spring XML アダプター:

<int-jms:message-driven-channel-adapter
        channel="inputChannel" container="jmsContainer" extract-payload="true" />


<beans:bean id="jmsContainer"        class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <beans:property name="connectionFactory" ref="connectionFactory" />
    <beans:property name="destinationName" value="Queue.test" />
    <beans:property name="errorHandler" ref="errorHandler" />
</beans:bean> 

DSL の問題のあるアダプター:

private JmsMessageDrivenChannelAdapter MessageDrivenChannelAdapter(
        String destinationName, String key) throws Exception {
    JmsMessageDrivenChannelAdapter channelAdapter = Jms
            .messageDriverChannelAdapter(connectionFactory)
            .outputChannel(inputChannel)
            .configureListenerContainer(
                    c -> c.errorHandler(errorHandler))
            .destination(destinationName)
            .setHeaderMapper(new HeaderMapper(getChannelHeaders(key)))
            .get();
    return channelAdapter;
}
4

1 に答える 1