如需使用最新稳定版本,请使用 Spring Integration 7.0.4spring-doc.cadn.net.cn

操作符 gateway()

gateway() 运算符在 IntegrationFlow 定义中是一种特殊的服务激活器实现,用于通过其输入通道调用其他端点或集成流程并等待回复。 从技术上讲,它在 <chain> 定义中的作用与嵌套的 <gateway> 组件相同(参见 在链内部调用链),并且允许流程更加简洁和直观。 从逻辑和业务角度来看,它是一个消息网关,用于在目标集成解决方案的不同部分之间分发和复用功能(参见 消息网关)。 该运算符针对不同的目标提供了多种重载形式: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 的方法允许调用现有的 IntegrationFlow Bean,或通过内联 Lambda 将流程声明为子流程(针对 IntegrationFlow 函数式接口),或者将其提取到 private 方法中以获得更简洁的代码风格: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,以防止调用线程无限期挂起。 在这种情况下,流程将在此处结束,并释放该线程以进行后续工作。