バックグラウンド:
以下に示すように、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;
}