Spring集成使用网关发送ack

时间:2014-07-04 13:10:20

标签: java spring spring-integration

我有一个生产者(用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?)
    }

然后将消息发送给生产者以获取每条消息。

谢谢。

1 个答案:

答案 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套接字。