Frühling Integration TCP-Gateway Bedeutung kann so eingestellt werden, wie folgt:Antwort-Timeout in Integration tcp-Inbound-Gateway im Frühjahr
<!-- Server side -->
<int-ip:tcp-connection-factory id="crLfServer"
type="server"
port="${availableServerSocket}"/>
<int-ip:tcp-inbound-gateway id="gatewayCrLf"
connection-factory="crLfServer"
request-channel="serverBytes2StringChannel"
error-channel="errorChannel"
reply-timeout="10000" />
<int:channel id="toSA" />
<int:service-activator input-channel="toSA"
ref="echoService"
method="test"/>
<bean id="echoService"
class="org.springframework.integration.samples.tcpclientserver.EchoService" />
<int:object-to-string-transformer id="serverBytes2String"
input-channel="serverBytes2StringChannel"
output-channel="toSA"/>
<int:transformer id="errorHandler"
input-channel="errorChannel"
expression="Error processing payload"/>
Beachten Sie die Antwort-Timeout, die als 10 Sekunden eingestellt wird.
Bedeutet dies, dass der TCP-Server den Dienst anruft und maximal 10 Sekunden warten kann? Wenn der Dienst nicht innerhalb von 10 Sekunden antwortet, sendet der TCP-Server die Nachricht an errorChannel, die wiederum die Client-Fehlermeldung "Fehler bei der Verarbeitung der Nutzdaten" sendet?
Wenn ich den TCP-Server mit einem Dienst getestet habe, der 20 Sekunden dauert, benötigt der Client 20 Sekunden, um die Antwort zu erhalten. Ich sehe keine Fehlermeldung.
Können Sie bitte helfen, das Antwort-Timeout im TCP Inbound-Gateway zu verstehen?
Dank
UPDATE: Vielen Dank für Artem mit diesem Problem zu helfen. Der beste Weg, um dieses Problem zu lösen, ist mit der folgenden Konfiguration:
<beans>
<int-ip:tcp-connection-factory id="crLfServer" type="server" port="${availableServerSocket}"/>
<int-ip:tcp-inbound-gateway id="gatewayCrLf" connection-factory="crLfServer" request-channel="requestChannel" error-channel="errorChannel" reply-timeout="5000" />
<int:service-activator input-channel="requestChannel" ref="gateway" requires-reply="true"/>
<int:gateway id="gateway" default-request-channel="timeoutChannel" default-reply-timeout="5000" />
<int:object-to-string-transformer id="serverBytes2String" input-channel="timeoutChannel" output-channel="serviceChannel"/>
<int:channel id="timeoutChannel">
<int:dispatcher task-executor="executor"/>
</int:channel>
<bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="5" />
<property name="maxPoolSize" value="10" />
<property name="queueCapacity" value="25" />
</bean>
<int:service-activator input-channel="serviceChannel" ref="echoService" method="test"/>
<bean id="echoService" class="org.springframework.integration.samples.tcpclientserver.EchoService" />
<int:transformer id="errorHandler" input-channel="errorChannel" expression="payload.failedMessage.payload + ' errorHandleMsg: may be timeout error'"/>
</beans>
Dank
Ich habe keine Kontrolle über den Client und kann daher keine Logik auf dem Client hinzufügen, um die Zeitüberschreitung zu behandeln. – kevin
Ich schätze Ihre Forschung in der Frage, Artem. Ich habe keine Kontrolle über den Client und kann daher keine Logik auf dem Client hinzufügen, um das Timeout zu verarbeiten. Ich brauche Server, um SocketTimeoutException zu senden oder die Nachricht an error-channel zu senden. Wann geht die Nachricht vom tcp-inbound-Gateway zum Fehlerkanal? Geht die Nachricht in den Fehlerkanal, wenn eine Ausnahme in echoService vorliegt und echoService sie nicht verarbeitet? – kevin
Bitte finden Sie ein Update in meiner Antwort. –