我是一个服务的客户端,它通过套接字将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
中推送传入消息然后自动确认的最简洁方法是什么?
答案 0 :(得分:2)
使用<inbound-channel-adapter/>
代替<gateway/>
。
通道适配器专门用于单向集成方案,而网关通常用于请求/回复。