Spring integration Spring集成tcp工厂性能

Spring integration Spring集成tcp工厂性能,spring-integration,Spring Integration,我对spring集成tcp工厂有一些性能问题。 我的应用程序大约有70个客户端试图通过tcp连接发送数据。我使用了下面的配置,用于使用spring集成的tcp服务器,但在服务器中,我每5秒接收一次数据。但是,当我在不使用spring集成的情况下手动实现tcp套接字时,我每秒接收大约5个连接。你知道我的问题吗?我真的很想使用spring集成,但我不知道如何提高性能 <int:poller id="defaultPoller" default="true" tast-executor="def

我对spring集成tcp工厂有一些性能问题。 我的应用程序大约有70个客户端试图通过tcp连接发送数据。我使用了下面的配置,用于使用spring集成的tcp服务器,但在服务器中,我每5秒接收一次数据。但是,当我在不使用spring集成的情况下手动实现tcp套接字时,我每秒接收大约5个连接。你知道我的问题吗?我真的很想使用spring集成,但我不知道如何提高性能

<int:poller id="defaultPoller" default="true" tast-executor="defaultTaskExecutor"  fixed-delay="500" />
<task:executor id="defaultTaskExecutor" pool-size="5-20" queue-capacity="50"/>

<bean id="CustomeSerializerDeserializer"
    class="CustomeSerializerDeserializer" />

<task:executor id="tcpFactoryTaskExecutor" pool-size="5-20"
    queue-capacity="20000" />

<int-ip:tcp-connection-factory id="tcpConnectionFactory"
    type="server" port="5423"
    single-use="false" so-timeout="5000" task-executor="tcpFactoryTaskExecutor"
    serializer="CustomeSerializerDeserializer" deserializer="CustomeSerializerDeserializer" />

<int-ip:tcp-inbound-channel-adapter
    id="tcpInboundAdapter" channel="requestChannel" connection-factory="tcpConnectionFactory" />

<int:channel id="requestChannel">
    <int:queue capacity="50" /> 
</int:channel>

<int:service-activator input-channel="requestChannel"
    output-channel="responseChannel" ref="MessageHandler" method="parse" />

<bean id="MessageHandler"
    class="TCPMessageHandler" />

<int:channel id="responseChannel">
    <int:queue capacity="50" />
<int:channel /> 

<int-ip:tcp-outbound-channel-adapter
    id="tcpOutboundAdapter" channel="responseChannel" connection-factory="tcpConnectionFactory" />

}

我怀疑您的自定义反序列化程序5秒出现问题是可疑的,因为您的超时时间也是5秒-显示代码并解释协议

如果反序列化程序没有收到完整消息,它将超时


还可以为
org.springframework.integration
打开跟踪级别日志记录来调试此功能-如果您无法从跟踪中找到它,将日志文件发布到pastebin之类的地方,我们将进行查看。

我怀疑您的自定义反序列化程序5秒出现问题是可疑的,因为您的超时时间也是5秒-显示代码并解释协议

如果反序列化程序没有收到完整消息,它将超时


另外,为
org.springframework.integration
打开跟踪级别日志记录以调试此功能-如果您无法从跟踪中找到它,请将日志文件发布到pastebin之类的地方,我们将进行查看。

感谢您的回复。。。我编辑了我的问题并添加了自定义反序列化程序。关于超时,我把它改为10秒,但没有改变任何事情。回复的5秒也是平均时间。有时需要3秒,有时超过10秒。但大多数情况下,接收每个数据大约需要5秒钟。跟踪日志记录有什么启示吗?到目前为止,我从跟踪日志记录中了解到的一点是,消息是按顺序处理的。当一条消息到达时,直到前一条消息答复客户端,其他消息才到达,然后在不使用NIO时下一条消息到达(延迟约4秒),下游流在从套接字读取的同一线程上运行。但是,由于您的
requestChannel
是一个队列通道,因此应该立即释放线程以读取下一条消息。也就是说,您的配置有问题-当从
队列通道
消费时,service activator需要
。调试多线程应用程序时,请确保包含线程(
%t
和log4j)。我的配置与问题中的配置完全相同。我还有一个异步通道的默认轮询器。所以我没有得到它。你认为我的配置有什么问题?谢谢你回复gary。。。我编辑了我的问题并添加了自定义反序列化程序。关于超时,我把它改为10秒,但没有改变任何事情。回复的5秒也是平均时间。有时需要3秒,有时超过10秒。但大多数情况下,接收每个数据大约需要5秒钟。跟踪日志记录有什么启示吗?到目前为止,我从跟踪日志记录中了解到的一点是,消息是按顺序处理的。当一条消息到达时,直到前一条消息答复客户端,其他消息才到达,然后在不使用NIO时下一条消息到达(延迟约4秒),下游流在从套接字读取的同一线程上运行。但是,由于您的
requestChannel
是一个队列通道,因此应该立即释放线程以读取下一条消息。也就是说,您的配置有问题-当从
队列通道
消费时,service activator需要
。调试多线程应用程序时,请确保包含线程(
%t
和log4j)。我的配置与问题中的配置完全相同。我还有一个异步通道的默认轮询器。所以我没有得到它。你认为我的配置有什么问题?
public class SerializerDeserializer extends AbstractByteArraySerializer{


   @Override
   public void serialize(byte[] object, OutputStream outputStream)
           throws IOException {
       if (object != null && object.length != 0) {
           outputStream.write(object);
           outputStream.flush();
       }
   }

   @Override
   public byte[] deserialize(InputStream inputStream) throws IOException {
       int c = inputStream.read();
           if (c!=0){
               // 2 byte
               byte[] configMessage = BinaryUtil.readNByteArrayFromStream(inputStream, c)/*(inputStream , c)*/;

               return configMessage;
           }    
           int d = inputStream.read();
           if (d==0){
               // 253 byte

               byte[] dataMessage = BinaryUtil.readNByteArrayFromStream(inputStream,253);
               return dataMessage;
           }

           // 15 byte
           byte[] hanshakeMessage = BinaryUtil.readNByteArrayFromStream(inputStream,d);
           return hanshakeMessage;
   }