Java 如何在spring集成中处理ACK/NAK?
我的Tcp服务器与spring集成配合得很好。我使用以下bean:Java 如何在spring集成中处理ACK/NAK?,java,tcp,spring-integration,tcp-ip,Java,Tcp,Spring Integration,Tcp Ip,我的Tcp服务器与spring集成配合得很好。我使用以下bean: <int-ip:tcp-connection-factory id="tcpServerFactory" type="server" port="9000" single-use="true" so-timeout="10000" using-nio="false" serializer="connectionSerializeDeserialize" deseri
<int-ip:tcp-connection-factory id="tcpServerFactory"
type="server"
port="9000"
single-use="true"
so-timeout="10000"
using-nio="false"
serializer="connectionSerializeDeserialize"
deserializer="connectionSerializeDeserialize"
task-executor="taskExecutor"
/>
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="5" />
<property name="maxPoolSize" value="100" />
<property name="queueCapacity" value="25" />
</bean>
<bean id="connectionSerializeDeserialize" class="org.springframework.integration.ip.tcp.serializer.ByteArrayStxEtxSerializer"/>
<int-ip:tcp-inbound-gateway id="gatewayStxEtx"
connection-factory="tcpServerFactory"
request-channel="requestChannel"
error-channel="tcpErrorChannel"
reply-timeout="10000"
/>
如果我的客户收到格式正确的消息(STX和ETX之间包含的数据),则会发送ACK。如果在接收数据时出现任何错误,它将发送NAK。在Tcp服务器上,我需要读取客户端发送的ACK/NAK。若客户端发送ACK,那个么服务器不需要做任何事情。若客户端发送NAK,服务器需要将数据重新发送回客户端
在spring集成中是否有处理ACK/NAK的序列化程序?
如果没有,请建议在何处以及如何处理ACK/NAK
谢谢客户端发送的ack/nack的格式是什么?您当前的
连接序列化反序列化
是什么样子的?客户端以单个字节0x06发送ACK。(或NAK为0x15)。我的序列化程序bean来自spring OK;在这种情况下,您将需要一个定制的反序列化器
,该反序列化器检测ack/nack,否则将委托给Byt耳环er
。由于这是对响应的(n)确认,您将希望丢弃它(而不是将其作为消息转发),因此反序列化程序应返回null。但是,请注意,tcpmessageapper
将记录警告日志,因此您可能希望将其记录器设置为仅记录错误级别的日志。对于NACK,您必须返回一些将包装在消息中的值,并且您的流必须对其进行处理。谢谢Gary,自定义反序列化器似乎是一种方法。客户端发送的ack/NACK的格式是什么?您当前的连接序列化反序列化
是什么样子的?客户端以单个字节0x06发送ACK。(或NAK为0x15)。我的序列化程序bean来自spring OK;在这种情况下,您将需要一个定制的反序列化器
,该反序列化器检测ack/nack,否则将委托给Byt耳环er
。由于这是对响应的(n)确认,您将希望丢弃它(而不是将其作为消息转发),因此反序列化程序应返回null。但是,请注意,tcpmessageapper
将记录警告日志,因此您可能希望将其记录器设置为仅记录错误级别的日志。对于NACK,您必须返回一些将被包装在消息中的值,并且您的流必须对其进行处理。谢谢Gary,定制反序列化器似乎是一个不错的选择。