此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Integration 6.5.1! |
操作员网关 ()
这gateway()
运算符IntegrationFlow
definition 是一个特殊的服务激活器实现,通过其输入通道调用其他端点或集成流并等待回复。
从技术上讲,它与嵌套的<gateway>
组件中的组件<chain>
定义(请参阅从链中调用链),并允许流更干净、更直接。
从逻辑上讲,从业务角度来看,它是一个消息传递网关,允许在目标集成解决方案的不同部分之间分发和重用功能(请参阅消息传递网关)。
此运算符针对不同的目标有多个重载:
-
gateway(String requestChannel)
按名称向某个端点的输入通道发送消息; -
gateway(MessageChannel requestChannel)
通过直接注入将消息发送到某个端点的输入通道; -
gateway(IntegrationFlow flow)
向提供的输入通道发送消息IntegrationFlow
.
所有这些都有第二个变体Consumer<GatewayEndpointSpec>
参数来配置目标GatewayMessageHandler
和各自的AbstractEndpoint
.
此外,IntegrationFlow
-based 方法允许调用现有的IntegrationFlow
bean 或通过就地 lambda 将流声明为子流,以便IntegrationFlow
函数式接口或将其提取到private
方法 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 以防止无限期挂起调用线程。
在这种情况将在该点结束,并释放线程以进行进一步工作。 |
从 6.5 版开始,此gateway()
运算符完全支持async(true)
行为。
在内部,一个AsyncRequestReplyExchanger
服务接口为GatewayProxyFactoryBean
.
自AsyncRequestReplyExchanger
合约是一个CompletableFuture<Message<?>>
,整个请求-回复以异步方式执行。