0
我通過註釋配置了以下配置的簡單TcpOutboundGateway:Spring集成TCP「空有效載荷從連接」警告
@Bean
@ServiceActivator(inputChannel="toTcpChannel")
public TcpOutboundGateway outboundClient() {
TcpOutboundGateway tcpOutboundGateway = new TcpOutboundGateway();
tcpOutboundGateway.setConnectionFactory(clientFactory());
tcpOutboundGateway.setRequiresReply(true);
tcpOutboundGateway.setReplyChannel(filterChannelInput());
tcpOutboundGateway.setRequestTimeout(tcpRequestTimeout);
tcpOutboundGateway.setRemoteTimeout(tcpReplyTimeout);
return tcpOutboundGateway;
}
@Bean
public AbstractClientConnectionFactory clientFactory() {
TcpNetClientConnectionFactory factory = new TcpNetClientConnectionFactory(tcpHost, Integer.parseInt(tcpPort));
factory.setSoKeepAlive(true);
factory.setSoReceiveBufferSize(tcpBufferSizeReal);
factory.setSoSendBufferSize(tcpBufferSizeReal);
factory.setSerializer(serializer());
factory.setDeserializer(serializer());
factory.setSingleUse(false);
return factory;
}
設置factory.setSingleUse(false);
我已經發現我的連接下面的隨機問題:
13:02:10,851 WARN [org.springframework.integration.ip.tcp.connection.TcpMessageMapper] (pool-6-thread-1) Null payload from connection XXXX.XXXX.XXXX.XXXX:9100:52940:22539566-1e50-4f68-a599-0b211ab3c6ef
13:02:10,851 WARN [org.springframework.integration.ip.tcp.connection.TcpMessageMapper] (pool-6-thread-1) Null payload from connection XXXX.XXXX.XXXX.XXXX:9100:52940:22539566-1e50-4f68-a599-0b211ab3c6ef
13:02:10,851 WARN [org.springframework.integration.ip.tcp.connection.TcpMessageMapper] (pool-6-thread-1) Null payload from connection XXXX.XXXX.XXXX.XXXX:9100:52940:22539566-1e50-4f68-a599-0b211ab3c6ef
13:02:10,851 WARN [org.springframework.integration.ip.tcp.connection.TcpMessageMapper] (pool-6-thread-1) Null payload from connection XXXX.XXXX.XXXX.XXXX:9100:52940:22539566-1e50-4f68-a599-0b211ab3c6ef
.....
[Stackoverflow exception in JBOSS]
好的,我改變了factory.setSingleUse(true);
關閉每個連接的套接字,顯然設置日誌級別爲ERROR
,但我不明白這個問題。是什麼原因? ¿無效的消息結束? ¿串行?
此外,我測試與Wireshark如果套接字接收空消息,但最後收到的消息(正確格式)後沒有消息。
¿有什麼建議嗎?
好吧,現在我看到了問題。我必須用字符串「」檢測消息的結尾,但我沒有正確實現序列化程序。我只看到有字節的例子,但是大數據流的ByteArrayOutputStream例子呢? AbstractPooledBufferByteArraySerializer序列化器可能是一個很好的起點? – crm86
即將推出的5.0有一個新的['ByteArrayElasticRawDeserializer'](https://github.com/spring-projects/spring-integration/blob/master/spring-integration-ip/src/main/java/org/springframework/integration /ip/tcp/serializer/ByteArrayElasticRawDeserializer.java#L27)。但它使用套接字EOF來檢測消息的結束。我們可能應該增強其他人使用BAOS。 –