我在我的应用程序中使用Spring集成TcpInboundGateway,它通过TCP通道从远程客户端接收请求(数据包)。配置如下:
@Bean
ByteArrayCrLfSerializer ser()
{
return new ByteArrayCrLfSerializer();
}
@Bean
TcpNetServerConnectionFactory cf(){
TcpNetServerConnectionFactory connectionFactory=new TcpNetServerConnectionFactory(45456);
connectionFactory.setSingleUse(true);
connectionFactory.setSerializer(ser());
connectionFactory.setDeserializer(ser());
return connectionFactory;
}
@Bean
TcpInboundGateway tcpGate(){
TcpInboundGateway gateway=new TcpInboundGateway();
gateway.setConnectionFactory(cf());
gateway.setRequestChannel(requestChannel());
gateway.setRequestTimeout(TIMEOUT);
return gateway;
}
@Bean
public MessageChannel requestChannel(){
return new DirectChannel();
}
据我所知,它支持多线程。但是当很多请求同时出现时,apllication停止使用以下错误消息。
2016-06-13 06:12:52.330 INFO 1431 --- [pool-2-thread-1] .s.i.i.t.c.TcpNetServerConnectionFactory : Server Socket closed
是否缺少任何配置以支持多线程同时处理大量请求。
答案 0 :(得分:1)
但是,StackTrace不够......虽然当下游进程无法赶上所有传入的消息时,这可能是gateway.setRequestTimeout(TIMEOUT);
的原因。考虑让它变得无限。
或者查看您的服务,并尝试找出它们在多线程中无法正常工作的原因。
答案 1 :(得分:0)
您可能希望通过TcpNioServerConnectionFactory而不是TcpNetServerConnectionFactory来使用非阻塞I / O。 一些文档:https://docs.spring.io/spring-integration/docs/5.2.1.RELEASE/reference/html/ip.html#note-nio