java - Spring Integration 通过 tcp 连接接收和发送消息

标签 java tcp spring-integration

我正在尝试使用 Spring Integration 实现以下场景:

  • 我需要通过 TCP IP 连接到服务器并处理收到的消息。
  • 我需要将消息发送到接收和处理响应的同一台服务器。

这是我的配置:

 <channel id="input">

        <interceptors>
            <wire-tap channel="logger"/>
        </interceptors>
    </channel>


    <logging-channel-adapter id="logger" level="DEBUG" log-full-message="true"/>

    <ip:tcp-connection-factory id="factory" type="client" host="localhost" port="9004" single-use="false"
                               using-nio="true" deserializer="javaDeserializer"/>

    <ip:tcp-inbound-channel-adapter id="inbound" channel="input" connection-factory="factory" client-mode="true"
                                    retry-interval="5000"/>

我可以收到服务器发来的消息,但我不知道如何转换字符串。消息到达时不会调用 javaDeserializer。

2014-01-19 05:47:20 DEBUG TcpNioConnection:380 - localhost:9004:74154fb2-f77c-4036-9142-e756e53a6ac6 Reading...
2014-01-19 05:47:20 DEBUG TcpNioConnection:324 - Read 26 into raw buffer
2014-01-19 05:47:25 DEBUG TcpNioConnection:380 - localhost:9004:74154fb2-f77c-4036-9142-e756e53a6ac6 Reading...
2014-01-19 05:47:25 DEBUG TcpNioConnection:324 - Read 26 into raw buffer
2014-01-19 05:47:30 DEBUG TcpNioConnection:380 - localhost:9004:74154fb2-f77c-4036-9142-e756e53a6ac6 Reading...
2014-01-19 05:47:30 DEBUG TcpNioConnection:324 - Read 26 into raw buffer
2014-01-19 05:47:35 DEBUG TcpNioConnection:380 - localhost:9004:74154fb2-f77c-4036-9142-e756e53a6ac6 Reading...
2014-01-19 05:47:35 DEBUG TcpNioConnection:324 - Read 26 into raw buffer

this例如,您可以发送消息并处理来自服务器的回复,但是连接将关闭并且不会继续收听来自服务器的消息。知道如何解决这个问题吗?

提前致谢。

爱德华多

最佳答案

TCP 是一种流协议(protocol),没有“消息”的概念。该框架使用序列化器(用于输出)和反序列化器(用于输入)对流中的消息进行编码/解码。

框架有多个standard deserializers (例如,消息由 \n\r\n 等分隔)。

如果您的数据不符合其中一种标准格式,您需要提供自定义反序列化器。一个好的起点是查看 standard deserializers。并将 AbstractByteArraySerializer 子类化。

关于java - Spring Integration 通过 tcp 连接接收和发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21215840/

相关文章:

c# - 如何知道反序列化类的类型?(或对象)

java - SimpleMessageListenerContainer - 从失败中恢复

由于单向 MessageHandler,spring-integration 并行拆分路由聚合流失败

java - 使用 request.getRemoteAddr() 返回 0 :0:0:0:0:0:0:1

java - 在类中存储变量时遇到问题

tcp - 异步套接字 : always listen to incoming TCP messages

java - 使用 Spring Integration JAR 时 Spring Batch 不退出

Java 8 对多个对象进行排序

java - Hadoop 错误 : Java heap space when using big dataset

linux - Linux接收器窗口自动调整部分源代码