Spring integration TcpNioClientConnectionFactory与TcpNetClientConnectionFactory

Spring integration TcpNioClientConnectionFactory与TcpNetClientConnectionFactory,spring-integration,Spring Integration,我正在使用: spring-integration-java-dsl-1.2.3.RELEASE spring-integration-ip-4.3.19.1版本 spring-integration-http-4.3.19.RELEASE 我想知道这两种实现TcpNetClientConnectionFactory和TcpNioClientConnectionFactory之间的区别 我已经创建了一个连接到服务器的应用程序,我的应用程序必须支持每秒大量的事务,可能每秒100个事务 我不知道

我正在使用:

  • spring-integration-java-dsl-1.2.3.RELEASE
  • spring-integration-ip-4.3.19.1版本
  • spring-integration-http-4.3.19.RELEASE
我想知道这两种实现TcpNetClientConnectionFactory和TcpNioClientConnectionFactory之间的区别

我已经创建了一个连接到服务器的应用程序,我的应用程序必须支持每秒大量的事务,可能每秒100个事务

我不知道我的实现是否支持大容量

通常建议使用NIO实现来避免阻塞,但我不知道它是否会改变我的应用程序将改进的实现类型

public IntegrationFlow createTcpConnection(String connectionId, String host, int port, int headBytes,
        int retryInterval) 
{

    LOGGER.debug("createTcpConnection ->  connectionId: {} - host: {} - port: {} - headBytes: {} - retryInterval: {}"
            ,connectionId,host,port,headBytes,retryInterval);
    IntegrationFlow ifr = existsConnection(connectionId);
    if (ifr == null) {
        TcpNetClientConnectionFactory cf = new TcpNetClientConnectionFactory(host, port);
        final ByteArrayLengthHeaderSerializer by = new ByteArrayLengthHeaderSerializer(headBytes);
        cf.setSingleUse(false);
        cf.setSoKeepAlive(true);
        cf.setSerializer(by);
        cf.setDeserializer(by);
        cf.setComponentName(connectionId);

        //Inbound Adapter 
        TcpReceivingChannelAdapter adapter = new TcpReceivingChannelAdapter();
        adapter.setConnectionFactory(cf);
        adapter.setClientMode(true);
        adapter.setErrorChannelName("errorChannel");
        adapter.setRetryInterval(retryInterval);

        ifr = IntegrationFlows
                .from(adapter)
                .enrichHeaders(h -> h.header("connectionId",connectionId))
                .channel(fromTcp)
                .handle("BridgeMessageEndpoint", "outbound")
                .get();
        this.flowContext.registration(ifr).id(connectionId+CONNECTION_SUFFIX + ".in").addBean(cf).register();



        //OutBound Adapter
        TcpSendingMessageHandler sender = new TcpSendingMessageHandler();
        sender.setConnectionFactory(cf);
        IntegrationFlow flow = f -> f.handle(sender);
        this.flowContext.registration(flow).id(connectionId+CONNECTION_SUFFIX + ".out").register();

           LOGGER.debug("createTcpConnection: Connection created");
    }
    return ifr;
}

一般来说,从I/O的角度来看,
TcpNet*
对于中小型的长期连接将更有效<代码>TcpNio*对于大量连接和/或寿命非常短的连接更好

如果要与
TcpNet…
配置并行处理入站消息,可以使用执行器通道作为适配器的输出通道,以便IO线程将工作交给另一个线程