如何在Spring Integration中实现这个TCP流读取器?

cod*_*ith 5 java streaming spring tcp spring-integration

我想要一个流读取器的 Spring Integration 实现。另一个应用程序(java 之外)将数据流(由美元符号分隔)发送到端口 9999。该服务器侦听

首先,我通过使用连接来确保流正在流式传输telnet 127.0.0.1 9999

然后我使用以下方法创建了一个简单的java应用程序。目前正在运行。

public void readStream() throws IOException{
    Scanner s = null;
    try {
        Socket skt = new Socket("localhost", 9999);
        BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(
                        skt.getInputStream()));
        s = new Scanner(bufferedReader);
        s.useDelimiter("[$]");
        System.out.println(s);
        while (s.hasNext()) {
            System.out.println("----------------------");
            System.out.println(s.next());
        }
    } finally {
        if (s != null) {
            s.close();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我想在 Spring Integration 框架中实现这一点。我查看了https://github.com/spring-projects/spring-integration-samples/tree/master/basic/tcp-client-serverhttp://docs.spring.io/autorepo/docs/spring-integration /2.0.0.M3/spring-integration-reference/html/stream.html。但我很困惑从哪里开始?连接到发送应用程序需要什么?(我对 Spring 框架真的很陌生。)

对我来说,困难在于术语。我应该创建 TCP 入站网关吗?或者接收通道适配器?或者是出站,因为我正在请求流?

加里评论后编辑:

<bean class="org.springframework.integration.ip.tcp.serializer.ByteArraySingleTerminatorSerializer" id="deserializer1">
    <constructor-arg type="byte" value="$"/>
</bean>
<int-ip:tcp-connection-factory id="server" type="server" port="9999"
    deserializer="deserializer1"
/>
<int-ip:tcp-inbound-channel-adapter id="adapter" connection-factory="server" request-channel="channel1"/>
<int:channel id="channel1" />
Run Code Online (Sandbox Code Playgroud)

Gar*_*ell 4

当服务器发送对入站请求的答复时,将使用入站网关。入站通道适配器(<int-ip:tcp-inbound-channel-adapter)仅用于单向集成 - 客户端仅发送数据并且不接收回复。

您将需要一个服务器连接工厂,配置为在属性中使用ByteArraySingleTerminatorSerializer已配置的分隔符。$deserializer

请使用最新的文档,而不是您问题中的旧版本。