Wir haben einen Frühling Integration Adapter in Spring XML-Konfigurations geschrieben, wie unten gezeigt. Es funktioniert perfekt in allen Szenarien mit Fehlerbehandlung. Die Fehlerbehandlung besteht darin, die Fehlermeldung in eine Warteschlange zu schreiben. Jetzt müssen wir diese XML-Konfiguration zu DSL umwandeln, wir haben das mit dem folgenden Code geändert.
Problem:
Immer wenn ein Fehler innerhalb Kette ‚inputChannel‘ geschieht, wollten wir die Fehlerbehandlung eine Inspektion zu tun, und die Fehler schreiben Warteschlange auf Fehler und nicht die Payload wiederholen. Spring XML tut genau das, was benötigt wird, aber wenn wir es nach dem Platzieren der Fehlermeldung in die Fehlerwarteschlange in DSL ändern, wird die Nutzlast zurück in die Eingabewarteschlange geschrieben und die Fehlermeldung aus der Warteschlange verschwindet in einer Schleife, die niemals endet .
Analyse wir haben:
kein Fehler ist passiert, nachdem die Fehlermeldung Warteschlange und DSL-Adapter Config muss nicht als solches Verfahren etwas Fehler geschrieben.
Jede Hilfe/Richtung, um dies zu lösen, wird sehr geschätzt.
Arbeits Spring-XML-Adapter:
<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>
Problematische Adapter in 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;
}