【发布时间】:2021-04-18 16:38:37
【问题描述】:
我有一个 Spring Boot 项目,我正在使用 Spring Integration 进行 TCP 通信。我将请求发送到服务器,服务器首先返回 06 作为 ACK。几秒钟后,实际响应来自服务器。有时 ACK 和实际响应会同时出现,但大多数情况下不会。 在春季集成中,我该如何处理?收到 ACK 后,我应该怎么做才能等待实际响应?或者我怎样才能阅读实际的回复?我怎样才能达到它?
这是我的 TCP 配置:
<bean id="messageSerializer"
class="MyCustomByteArraySerializer"/>
<int-ip:tcp-connection-factory id="tcpClientFactory"
type="client"
host="${host}"
port="${port}"
so-keep-alive="true"
single-use="false"
using-nio="true"
serializer="messageSerializer"
deserializer="messageSerializer"/>
<ip:tcp-outbound-gateway id="outboundGateway"
connection-factory="tcpClientFactory"
request-channel="toTcpAdapterChannel"
reply-channel="fromTcpAdapterChannel"
auto-startup="true"
request-timeout="90000"
remote-timeout="90000"
reply-timeout="90000"/>
编辑:我的反序列化器是这样的:
@Override
public byte[] deserialize(InputStream inputStream) throws IOException {
int length = inputStream.available();
logger.info("Available length of inputStream is: {}", length);
byte[] incomingArray = new byte[length];
this.read(inputStream, incomingArray, false);
if (length == 1) {
logger.info("Length is 1. Incoming byte: {}", HexUtils.toHexString(incomingArray));
return null;
} else {
System.out.println("Message DUMP-1! " + HexUtils.toHexString(incomingArray));
incomingArray = Arrays.copyOfRange(incomingArray, 1, length - 1);
}
return incomingArray;
}
编辑 2:将代码带到 while 循环解决了我的问题。
@Override
public byte[] deserialize(InputStream inputStream) throws IOException {
boolean allMessageRead = false;
byte[] incomingArray = new byte[0];
while (!allMessageRead) {
int length = inputStream.available();
incomingArray = new byte[length];
this.read(inputStream, incomingArray, false);
if (length == 1) {
logger.info("Available length of inputStream is: {}", length);
logger.info("Length is 1. Incoming byte: {}", HexUtils.toHexString(incomingArray));
return null;
} else if (length > 1) {
System.out.println("Message DUMP-1! " + HexUtils.toHexString(incomingArray));
incomingArray = Arrays.copyOfRange(incomingArray, 1, length - 3);
allMessageRead = true;
}
}
return incomingArray;
}
【问题讨论】:
标签: spring tcp spring-integration