2016-04-20 9 views
2

Wir haben eine feder Integration Anwendung, wo wir mit den Nachrichten auf dem Fehler ein Minimum beschäftigen möchte channel.At wir die Geschichte extrahieren möchten und es melden Sie sich so können wir visualisieren, wo genau es etc gescheitertSpring-Integration Fehlerbehandlung - Wie kann ich auf den Verlauf der ursprünglichen fehlerhaften Nachricht zugreifen?

Hier nur dieses eine kurze Markup Bit

<int:poller id="defaultPoller" default="true" fixed-delay="5000" /> 

    <int:channel id="MyCustomErrorChannel"> 
     <int:queue capacity="10"/> 
    </int:channel> 



    <int:header-enricher id="errorMsg.HeaderEnricher" 
     input-channel="errorChannel" 
     output-channel="MyCustomErrorChannel"> 
     <int:header name="history" expression="payload.failedMessage.headers" /> 
    </int:header-enricher> 

    <int:service-activator input-channel="MyCustomErrorChannel" ref="errorLogger" method="logError"/> 


    <bean id="errorLogger" class="com.dataprep.util.ErrorLogger" /> 

Die Idee ist, unsere eigene Fehlerkanal MyCustomErrorChannel zu definieren. Jeder Fehler, der in der Standard endet errorChannel seine Header angereichert wird, bevor sie auf MyCustomErrorChannel löschte wird Schließlich haben wir einen Logger, der die Nachrichten von MyCustomErrorChannel liest und protokolliert die Nutzlast, die die zugrunde liegende Ausnahme ist und auch die Geschichte.

Ich stellt fest, dass die Geschichte in meinem Logger ist immer 3 Schritte errorChannel, errorMsg.HeaderEnricher, pbSwiftRouterErrorChannel heißt nichts vor dieser Nachricht Landung auf dem errorChannel in der Geschichte erhältlich ist. Wie komme ich an die Geschichte der ursprünglichen Nachricht (dh die Geschichte der fehlerhaften Nachricht, die irgendwie auf dem Standardfehlerkanal als eine neue Fehlermeldung gelandet)

Könnten Sie bitte einen Blick auf meinem Kopf enricher nehmen und mich lassen weiß, wie man auf die Header der fehlgeschlagenen Nachricht zugreift und sie in die Fehlermeldung stopft?

Ist es überhaupt machbar?

Antwort

2
  1. Um bestehende Header ersetzen Sie overwrite="true" verwenden sollten, weil die history für die ErrorChannel gebaut wird, auch.

  2. Sie sollten mit history Header überschreiben, nicht die ganze headers. Daher muss Ihr Ausdruck aussehen:

    <int:header name="history" 
          expression="payload.failedMessage.headers.history" 
          overwrite="true"/> 
    
+0

Dank sehr much.That war viel zu schnell !!! – Chetya

+0

Er-er! Nicht so. Vom Betteln wollte ich ein bisschen anders kommentieren ;-) –

Verwandte Themen