寻找具有自动回复或无回复的TCPInboundGateway

时间:2014-02-11 01:17:07

标签: spring-integration

我是一个服务的客户端,它通过套接字将XML文档传输到我的firehose风格。一旦建立连接,我就不会收到任何消息,我的代码也会拼命地试图跟上传入的数据。

为此我在客户端模式下使用tcp-inbound-gateway

<ip:tcp-inbound-gateway id="inGateway"
    request-channel="socketInChannel"
    connection-factory="connectionFactory"
    reply-timeout="10000"
    retry-interval="5000"
    auto-startup="false"
    client-mode="true"/>

我的连接工厂包括一个自定义反序列化程序,它可以检测流式XML上的开始和结束标记,以便将流切换为文档。每个文档都会向下游发送到socketInChannel以供其他组件处理。

<ip:tcp-connection-factory id="connectionFactory"
    type="client"
    host="${socket.url}"
    port="${socket.port}"
    single-use="false"
    so-keep-alive="true"
    interceptor-factory-chain="authInterceptorFactory"
    deserializer="xmlDeserializer"
    serializer="xmlDeserializer"/>

所有这一切都有效......但我发现我并没有将数据从我的套接字中拉出来。我终于意识到我每隔10秒就像发条一样处理1条消息。所以我立即责怪reply-timeout上的tcp-inbound-gateway。把它降到100,瞧,我能跟上。

现在,我最好猜测为什么这个有效,tcp-inbound-gateway期待我的下游组件的回复,但没有一个即将到来。当我最小化reply-timeout时,它会放弃等待快速回复并转到套接字的下一条消息。

这似乎不是一个理想的解决方案。由于firehose不希望我做出任何回复,因此我的网关会将每条消息转发到QueueChannel,以便从中获取解耦的消费者代码。

有没有办法将tcp-inbound-gateway配置为不期待回复?如果没有,那么在QueueChannel中推送传入消息然后自动确认的最简洁方法是什么?

1 个答案:

答案 0 :(得分:2)

使用<inbound-channel-adapter/>代替<gateway/>

通道适配器专门用于单向集成方案,而网关通常用于请求/回复。