弹簧集成大连接处理

时间:2019-01-21 10:28:35

标签: spring-boot spring-integration

我们已经实现了带有弹簧集成的tcp服务器。

配置与

相同
@Bean
TcpNetServerConnectionFactory cf(){
    TcpNetServerConnectionFactory connectionFactory=new TcpNetServerConnectionFactory(TCP_PORT);

    connectionFactory.setSerializer(new CustomSerializerDeserializer());
    connectionFactory.setDeserializer(new CustomSerializerDeserializer());
    connectionFactory.setSoTimeout(TIMEOUT);
    return connectionFactory;
}

@Bean
TcpInboundGateway tcpGate(){

    TcpInboundGateway gateway=new TcpInboundGateway();
    gateway.setConnectionFactory(cf());
    gateway.setRequestChannel(requestChannel());
    return gateway;
}

@Bean
public MessageChannel requestChannel(){

    return new DirectChannel();
}

和服务激活器

@MessageEndpoint 
public class Echo {

    @ServiceActivator(inputChannel="requestChannel")
    public byte[] echo(byte[] in,@SuppressWarnings("deprecation") @Header("ip_address") String ip){

        return "OK".getBytes();
    }
}

我们与分配的端口建立了150多个连接,每10秒就有150多个tcp数据包。

当前,我们正在处理延迟的数据包接收问题,我们需要实时数据才能正常运行。

最近我们得出结论,线程正在等待执行,这导致包的延迟接收。

我们如何通过spring集成和tcp inboudgateways处理此类问题。

2 个答案:

答案 0 :(得分:2)

TcpNetServerConnectionFactoryAbstractConnectionFactory的子类,它定义了java.util.concurrent.Executor属性(taskExecutor)。

答案 1 :(得分:2)

使用TcpNioServerConnectionFactory代替; ...Net...对于少量持久连接更有效。

但是请参见this chapter in the reference manual