2016-07-27 8 views
0

ich durch unten Post ging: In spring integration, how do I catching different exceptions?int-ip: tcp-Verbindung-event-Inbound-Kanal-Adapter funktioniert nicht, wenn ich TcpConnectionExceptionEvent

Danach habe ich, wie unten für org.springframework.integration.ip.tcp.connection.TcpConnectionExceptionEvent Ereignishandler definiert:

<int:gateway id="gateway" service-interface="com.tcpclient.ClientGateway" 
    default-request-channel="tcp-client-input" 
    default-reply-channel="message"/> 
<int-ip:tcp-outbound-channel-adapter 
    id="outBoundClient" channel="tcp-client-input" 
    retry-interval="60000" auto-startup="true"/> 

<int-ip:tcp-inbound-channel-adapter 
    id="inBoundClient" channel="message" auto-startup="false" 
    retry-interval="60000"/> 
<int-ip:tcp-connection-event-inbound-channel-adapter 
    channel="tcpReceiveError" 
    event-types="org.springframework.integration.ip.tcp.connection.TcpConnectionExceptionEvent"/> 

Mein Service-Aktivator ist:

@Component 
public class ErrorHandler{ 

private static final Logger logger = LoggerFactory.getLogger(ErrorHandler.class); 

@ServiceActivator(inputChannel = "tcpReceiveError") 
public void handleError(Message m) { 

    logger.error("TcpError", m.getPayload()); 

} 

} 

An erster Stelle, wenn Host nicht nach oben oder Port ist nicht geöffnet, wenn ich versuche, zum ersten Mal eine Verbindung herzustellen, meine handleError(Message m) wird nicht wie unten Gespräch ausgeführt.

int-event:inbound-channel-adapter not working when there is java.net.ConnectException: Connection refused: connect

Aber einmal angeschlossen und ich beginne Nachrichten zu empfangen, wenn der Server zwischen Port oder geht in der schließt, wird handleError(Message m) nicht ausgeführt.

Bitte lassen Sie mich wissen, wenn ich einige falsche Konfigurationen an Ort und Stelle habe.

Antwort

0

Ich nehme an, dass dies auf this question basiert.

In diesem Fall liegt das daran, dass Ihre Verbindungsfactory nicht im Frühjahr verwaltet wird - daher wird kein Ereignisverleger bereitgestellt.

Sie sollten die Bean, die die Verbindungsfactory erstellt, ApplicationEventPublisherAware implementieren und den Herausgeber in einem Feld speichern. Wenn Sie dann die Verbindungsfactory erstellen, müssen Sie die Eigenschaft festlegen.

Ohne dass Sie Warnungen wie dies im Protokoll sehen sollte ...

this.logger.warn("No publisher available to publish " + event); 
+0

Ja, es basiert auf der gleichen question.Yes, ich sehe, dass im Protokoll zu warnen. Ich werde die Lösung versuchen und zurückkommen, wenn ich Schluckauf sehe. Nochmals vielen Dank :) –

+0

Eine Frage, 'wenn Sie die Verbindung Factory erstellen, müssen Sie die Eigenschaft festlegen '- Sollte ich Publisher-Eigenschaft festlegen? Wenn ja, mit was? Ich meine Soll ich setApplicationEventPublisher (ApplicationEventPublisher applicationEventPublisher) aufrufen? –

+0

Wie ich in der Antwort sagte - wenn die Bean, die die Fabrik erstellt, "ApplicationEventPublisherAware" ist, wird Ihnen der Herausgeber gegeben - im Setter speichern Sie es in einem Feld ('this.applicationEventPublisher = applicationEventPublisher'); Wenn Sie die Verbindungsfactory erstellen, geben Sie sie dort ein. Ja; 'setApplicationEventPublisher (this.applicationEventPublisher)'. –