2016-04-04 4 views
0

Ich habe folgende AnforderungFrühling Integration: TCP deaktivieren respnse lesen

  1. Connect (TCP)
  2. Senden Initialisierungsnachricht an die Buchse [Es wird keine Antwort vom Server sein]
  3. Überprüfen Sie, ob Die Verbindung ist live, wenn ja, senden Sie eine Polling-Nachricht.
  4. Wenn es eine Antwort gibt es.

Ich versuche, Benutzer Frühling Integration für die TCP-Verbindung, aber wenn ich versuche, den zweiten Schritt auszuführen, um den Rahmen für die Antwort wartet. Gibt es eine Möglichkeit, es so zu konfigurieren, dass es nicht auf die Antwort in Schritt 2 wartet?

Es folgt der Frühling Konfiguration:

<int:gateway default-request-channel="msOutbound" 
    service-interface="com.home.tcp.UserService" id="gw" /> 

<int-ip:tcp-outbound-gateway id="tcpObGw" 
    connection-factory="client" request-channel="msOutbound" 
    /> 

<int-ip:tcp-connection-factory id="client" 
    type="client" deserializer="serDeSer" serializer="serDeSer" 
    host="remoteServer" port="valid port" single-use="true" /> 

<bean id="serDeSer" 
    class="org.springframework.integration.ip.tcp.serializer.ByteArrayStxEtxSerializer" /> 

Java-Code:

service.send("init msg"); // The program exits with no response exception. 
service.send("polling message"); //Never executed. 

Antwort

0

Das Gateway ist ein Request/Response-Mechanismus (eine Anforderung, eine Antwort). Sie haben single-use auf true gesetzt, also selbst wenn der erste eine Antwort zurückgab, würde der zweite auf einen anderen Socket gehen.

Für Ihr Szenario müssen Sie single-use auf false setzen und einen Versuch/Fang um die erste send setzen, weil Sie dort eine Ausnahme erwarten.

Um das Timing zu verbessern, sollten Sie die remoteTimeout auf dem Gateway auf einen sehr kleinen Wert (0) für nur den ersten senden, dann erhöhen Sie etwas vernünftiges.

Verwandte Themen