当前位置: 首页 > 知识库问答 >
问题:

Spring集成tcp工厂性能

慕仲渊
2023-03-14
<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" />
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;
   }

共有1个答案

金何平
2023-03-14

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

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

还要为org.springframework.integration打开跟踪级别日志来调试它--如果您不能从跟踪中找到它,请将日志文件发布到类似pastebin的地方,我们将查看一下。

 类似资料:
  • 可能是一个简单的方法, 我想要的是:我有一个监听传入连接的tcp服务器。当客户连接时,我希望以某种方式得到通知。TcpNetServerConnectionFactory内部有这样的信息"接受的连接..."。 有一个TcpConnectionSupport类,但是我找不到如何使用它的方法。我正在寻找类似的用户模式。 有什么办法可以做到吗?

  • 我们使用的是Spring集成4.1.3。 使用tcp出站网关实现客户端。 请求期间从服务器收到一个tcp rset数据包,发生异常。什么原因?谢谢。 错误日志 wireshark日志在此处输入图像描述

  • <罢工> 错误: 没有类型为'org.springframework.test.web.servlet.mockMVC'的合格bean可用:至少需要1个符合autowire候选的bean。依赖项注释:{@org.springframework.beans.factory.annotation.autowire(required=true)}位于org.springframework.beans.f

  • 我试图创建一个接受入站连接的Tcp服务器,并异步地向连接的客户端发送消息。有一个Tcp服务器的示例,但它使用的是网关,是请求/响应,不支持异步。 null 异常org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是org.springframework.messaging.messagehandlingException:无

  • 我试图使用Spring Integration创建一个iso8385 TCP服务器。典型的情况如下: 客户端连接到服务器并保存ISO8385消息 服务器处理消息 服务器制定响应并关闭连接 我希望跟踪每个新的TCP连接,并为其创建一个标识符,以便将每个处理与连接的客户端相关联。但我不知道怎么做。这个想法是: 将ISO8385转换为java类的tcp入站适配器 将处理消息的服务激活器 将java类转换