2017-05-10 2 views
0

Ich habe eine federIntegrationsProjekt, das macht folgendesFrühlings-Integration Standard Retry Konfiguration

1.) Read messages from a queue 
2.) Transform messages 
3.) Send transformed messages to an Api 

Relevante Config für Schritt 1

<bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"> 
    <property name="targetConnectionFactory" ref="MQConnectionFactory" /> 
    <property name="sessionCacheSize" value="10"/> 
</bean> 


<bean id="requestQueue" class="com.ibm.mq.jms.MQQueue"> 
    <constructor-arg index="0" value="${queuemanager}"/> 
    <constructor-arg index="1" value="${incoming.queue}"/> 
</bean> 


<integration:poller id="poller" default="true" fixed-delay="1000"/> 

<jms:message-driven-channel-adapter id="jmsIn" 
     destination="requestQueue" 
     channel="inputJsonConversionChannel" 
     connection-factory="cachingConnectionFactory" /> 

Schritt 3 ist ein Service-Activator, und im Falle von ein Fehler (nicht HTTP-Status 201) Ich werfe eine benutzerdefinierte Ausnahme.

Relevante Config für Schritt 3

<int:service-activator input-channel="ApiChannel" ref="EventApiClient" method="post"/> 

<int:service-activator input-channel="errorChannel" ref="PListenerExceptionHandler" method="handleFailure"/> 

Das Verhalten, das auftritt, ist, dass es versucht, hält die gleichen Fehler immer und immer wieder zu verbinden und bekommt.

wollte ich wissen, ob jemand

  • mir erklären könnte, wie ist das Standardwiederholungs konfiguriert/anspringen?

  • Wie kann ich die Fehler auf einen Fehlerkanal umleiten, weil Fehler in Schritt 1 jetzt den globalen Fehlerkanal und den Standardfehlerhandler verwenden, den ich erstellt habe. Aber Fehler vom Service Activator sind nicht.

Prost

Kris

+0

Sie müssen Ihre Konfiguration zeigen und uns sagen, welche Technologie die Warteschlange ist - RabbitMQ? JMS? –

+0

Entschuldigung ... Ich habe den Beitrag für mehr Klarheit aktualisiert. – krisrr3

Antwort

0

Es ist erneut versucht, da der Message-Driven Kanaladapter transaktionalen standardmäßig ist, was bedeutet, die Ausnahme die Meldung bewirkt, dass in der Warteschlange zu walz zurück.

Sie können einen error-channel an den Adapter hinzufügen und Ausnahmen werden in Form eines ErrorMessage, die eine Nutzlast MessagingException hat, gesendet werden, welche Eigenschaften failedMessage und cause hat.

Wenn der Integrationsfluss nach dem Fehlerkanal den Fehler "konsumiert", wird die Transaktion festgeschrieben und die Nachricht entfernt. Wenn der Fehlerfluss eine Ausnahme auslöst, wird die Transaktion wie zuvor zurückgesetzt.

Es gibt eine Standardeinstellung errorChannel, die nur die Ausnahme standardmäßig protokolliert.

oder Sie können einen benutzerdefinierten Kanal verwenden und Ihre eigene Logik in einen Abonnenten für diesen Kanal einfügen.

+0

Danke Gary. Der Fehlerkanal wurde dem Adapter hinzugefügt und es wird nicht mehr zurückgesetzt – krisrr3

Verwandte Themen