2017-07-06 4 views
1

Ich habe drei verschiedene Systeme. Ich verwende die Spring-Integration, um Daten in all diesen Systemen zu synchronisieren.Fehlerbehandlung bei der Federintegration

System 1 Anrufe ---> System 2 über http: Inbound-Gateway

<int-http:inbound-gateway id="gateway" 
    path="/save" supported-methods="POST, PUT" 
    request-channel="requestChannel" reply-channel="replyChannel" 
    request-payload-type="com.model.Request" 
    mapped-request-headers="source" error-channel="errorChannel" /> 

System 2 wird Service-Methode aufrufen, um Daten zu beharren, die Antwort zurück, wenn Anfrage sonst gültig wirft Ausnahme

<int:service-activator ref="serviceMethod" 
    method="saveIfValid" input-channel="requestChannel" 
    output-channel="serviceOutput" /> 

<int:recipient-list-router id="id1" 
    input-channel="serviceOutput"> 
    <int:recipient channel="system1" /> 
    <int:recipient channel="system3" /> 
</int:recipient-list-router> 

Ich muss Service-Antwort nur an System 1 und System 3 senden, wenn der Vorgang erfolgreich ist. Nach dem Aufruf der Servicemethode wird auf der Grundlage der Antwort der Servicemethode die Anforderung für System 3 mit dem Transformer generiert. Nach dem Transformator stelle ich eine Anfrage in die mq-Warteschlange.

<int:transformer id="transformer1" 
    method="convert" input-channel="system3" 
    output-channel="jmsInput"> 
    <bean 
     class="com.transformer.System3Transformer" /> 
</int:transformer> 


<int-jms:outbound-channel-adapter id="adapter" 
    channel="jmsInput" destination-name="queueName"> 
</int-jms:outbound-channel-adapter> 

Aktualisiert JMS-Ausgangs Code

<int-jms:outbound-channel-adapter id="jms1" 
 
\t \t channel="jmsIn" destination-name="queueName"> 
 
\t \t <int-jms:request-handler-advice-chain> 
 
\t \t \t <bean 
 
\t \t \t \t class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice"> 
 
\t \t \t \t <property name="onSuccessExpression" value="T(Boolean).TRUE" /> 
 
\t \t \t \t <property name="successChannelName" value="afterSuccessDeleteChannel" /> 
 
\t \t \t  <property name="onFailureExpression" value="T(Boolean).FALSE" /> 
 
\t \t \t \t <property name="failureChannelName" value="afterFailRenameChannel" /> 
 
\t \t \t </bean> 
 
\t \t </int-jms:request-handler-advice-chain> 
 
\t </int-jms:outbound-channel-adapter>

Meine Frage ist

  • wenn Serviceklasse nicht ich brauche Fehlerantwort zu senden und stoppen den Fluss
  • ich f Service-Methode erfolgreich persistent Daten, aber die Transformation schlägt fehl, sollte System 1 Erfolg Antwort und Fehler sollte protokolliert werden.
  • Hier, wie ich bin Fehlerkanal in Ausgangsadapter verwendet, auch wenn Fehler in Transformator auftritt, wird es an System 1 zurückgegeben.
  • Bitte schlagen Sie vor, wie kann ich mit Fehler ohne globale Fehler Kanal und wie Fehler in Jms Outbound umzugehen Adapter.
    • danke für meine quesion Beantwortung

Antwort

0

Für den ersten Fall sollten Sie wirklich nur verlassen sich auf die Ausnahme Ausbreitung - die Strömungs stoppt und Fehler an den system1 als HTTP-Antwort gesendet.

Für den zweiten (transformer) Fall sollten Sie einen Blick in die ExpressionEvaluatingRequestHandlerAdvice nehmen und es mit den <request-handler-advice-chain> für die <transformer> verwenden.

Das gleiche kann für die <int-jms:outbound-channel-adapter> angewendet werden, wenn Sie das System1 bestätigen sollten.

http://docs.spring.io/spring-integration/reference/html/messaging-endpoints-chapter.html#expression-advice

https://github.com/spring-projects/spring-integration-samples/tree/master/intermediate/retry-and-more

+0

Danke, meine Frage zu beantworten. wenn irgendein Fehler in auftritt, ich will nur, dass es protokolliert, will ich keinen Fehler zu System 1 anzeigen. Kannst du bitte helfen, dies auch zu implementieren? –

+0

' \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t ' –

+0

Bitte siehe obigen Code. Es geht sowohl zum Erfolgskanal als auch zum Fehlerkanal. Können Sie bitte erläutern, wie es bewertet, ob es erfolgreich oder fehlgeschlagen ist? . –

Verwandte Themen