作员 gateway()
这gateway()
运算符包含在IntegrationFlow
definition 是一种特殊的 Service Activator 实现,通过其 input 通道调用其他端点或集成流并等待回复。
从技术上讲,它与嵌套的<gateway>
组件<chain>
定义(请参阅从 Chain 中调用 Chain),并允许流更清晰、更直接。
从逻辑上和业务角度来看,它是一个消息传递网关,允许在目标集成解决方案的不同部分之间分发和重用功能(请参阅 消息传递网关)。
此运算符具有多个用于不同目标的重载:
-
gateway(String requestChannel)
按其名称将消息发送到某个端点的 input 通道; -
gateway(MessageChannel requestChannel)
通过直接注入将消息发送到某个端点的 input 通道; -
gateway(IntegrationFlow flow)
将消息发送到提供的IntegrationFlow
.
所有这些都与第二个Consumer<GatewayEndpointSpec>
参数来配置目标GatewayMessageHandler
和各自的AbstractEndpoint
.
此外,IntegrationFlow
-based methods允许调用现有的IntegrationFlow
bean 或通过IntegrationFlow
functional 接口或将其提取到private
Method Cleaner 代码样式:
@Bean
IntegrationFlow someFlow() {
return IntegrationFlow
.from(...)
.gateway(subFlow())
.handle(...)
.get();
}
private static IntegrationFlow subFlow() {
return f -> f
.scatterGather(s -> s.recipientFlow(...),
g -> g.outputProcessor(MessageGroup::getOne))
}
如果下游流并不总是返回回复,则应将requestTimeout 设置为 0 以防止无限期挂起调用线程。
在这种情况将在该点结束,并释放线程以进行进一步的工作。 |