我无法清楚地了解如何在Spring Integration中读取TCP流。我有一个外部服务,它将一些数据广播到连接到它的客户端(TCP,Java套接字)。我已经在Spring Integration中尝试了很多配置。我的应用程序成功连接到我的外部服务(我可以从服务的日志中确认),但我仍然无法捕获流。但是,当我手动发送一些消息TO SERVICE(通过MessageChannel)时,我的bean正常工作。这意味着我的配置配置为捕获写事件。我找不到用于配置接收TCP流的明确指南或手册。我在我的项目中有这个xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:int-ip="http://www.springframework.org/schema/integration/ip"
xmlns:int="http://www.springframework.org/schema/integration"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/integration/ip http://www.springframework.org/schema/integration/ip/spring-integration-ip.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="accumulator"
class="ru.utilex.trueguard.Accumulator" />
<int-ip:tcp-connection-factory id="client"
type="client"
host="192.168.2.28"
port="8383"
so-timeout="10000"/>
<int:channel id="input" />
<int:channel id="toSA" />
<int-ip:tcp-outbound-channel-adapter id="inboundClient"
client-mode="true"
channel="input"
auto-startup="true"
connection-factory="client"/>
<int:object-to-string-transformer id="serverBytes2String"
input-channel="input"
output-channel="toSA"/>
<int:service-activator
input-channel="toSA"
ref="accumulator"
method="read"/>
</beans>
我的累加器类应该是我的接收频道的终点:
public class Accumulator {
public void read(String buffer) {
System.out.println("We have caught this message: " + buffer);
}
}
答案 0 :(得分:1)
您需要一个入站通道适配器。
请注意,使用连接工厂配置时,预计流上的消息将使用CRLF(0x0d0a)分隔。
如果您的服务使用其他机制来划分消息,则需要使用其他解串器。
入站适配器发出的消息将具有byte[]
个有效负载;如果需要String,则应在适配器和服务之间插入一个对象到字符串的变换器。