此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Integration 6.5.1spring-doc.cadn.net.cn

操作员网关 ()

gateway()运算符IntegrationFlowdefinition 是一个特殊的服务激活器实现,通过其输入通道调用其他端点或集成流并等待回复。 从技术上讲,它与嵌套的<gateway>组件中的组件<chain>定义(请参阅从链中调用链),并允许流更干净、更直接。 从逻辑上讲,从业务角度来看,它是一个消息传递网关,允许在目标集成解决方案的不同部分之间分发和重用功能(请参阅消息传递网关)。 此运算符针对不同的目标有多个重载:spring-doc.cadn.net.cn

  • gateway(String requestChannel)按名称向某个端点的输入通道发送消息;spring-doc.cadn.net.cn

  • gateway(MessageChannel requestChannel)通过直接注入将消息发送到某个端点的输入通道;spring-doc.cadn.net.cn

  • gateway(IntegrationFlow flow)向提供的输入通道发送消息IntegrationFlow.spring-doc.cadn.net.cn

所有这些都有第二个变体Consumer<GatewayEndpointSpec>参数来配置目标GatewayMessageHandler和各自的AbstractEndpoint. 此外,IntegrationFlow-based 方法允许调用现有的IntegrationFlowbean 或通过就地 lambda 将流声明为子流,以便IntegrationFlow函数式接口或将其提取到private方法 Cleaner 代码样式:spring-doc.cadn.net.cn

@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<?>>,整个请求-回复以异步方式执行。spring-doc.cadn.net.cn