我有一个生产者(用CPP编写)向“弹簧集成服务器”发送二进制数据。 并且它可以正常工作: spring integration time out clients
现在我必须向生产者发送回复(如ACK)。
我已经阅读了关于网关的内容,但实际上我很困惑。 我的配置是:
<int-ip:tcp-connection-factory id="serverTcpConFact"
type="server"
port="5566"
using-nio="true"
single-use="false"
task-executor="myTaskExecutor"
deserializer="serializer"
serializer="serializer"/>
<int-ip:tcp-inbound-channel-adapter id="tcpInboundAdapter"
channel="tcpInbound"
connection-factory="serverTcpConFact" />
<int:channel id="tcpInbound" />
<int:service-activator
output-channel="tcpOutbound"
input-channel="tcpInbound"
ref="importService"
method="handler" />
<bean id="importService" class="my.ImportService" />
<int:channel id="tcpOutbound" />
<int:gateway id="mygateway"
service-interface="my.IpMyGatway"
default-request-channel="tcpInbound"
default-reply-channel="tcpOutbound"
default-reply-timeout="6000"/>
我还有一个自定义序列化器,问题是我的spring集成服务器没有发送回复。
我需要回复执行:
@Override
public void serialize(MyMessage arg0, OutputStream outputStream) throws IOException {
// TODO Auto-generated method stub
logger.info("serialize messages");
// here I have to write my ACK ! ( .. or not?)
}
然后将消息发送给生产者以获取每条消息。
谢谢。
答案 0 :(得分:1)
我想知道为什么<int-ip:tcp-inbound-gateway>
对你来说还不够......
只需从service
生成回复消息,网关就会将其作为回复发送给客户端。
简单样本:
<ip:tcp-inbound-gateway id="gatewaySerializedNio"
connection-factory="connectionFactory"
request-channel="serviceChannel" />
<channel id="serviceChannel" />
<service-activator input-channel="serviceChannel"
ref="service" method="process"/>
<beans:bean id="service" class="com.my.proj.MyService" />
MyService#process
方法的返回值将被序列化为TCP套接字。