对于最新的稳定版本,请使用 Spring Integration 6.4.0spring-doc.cn

IntegrationFlow作为网关

可以从提供组件的服务接口开始,如下例所示:IntegrationFlowGatewayProxyFactoryBeanspring-doc.cn

public interface ControlBusGateway {

    void send(String command);
}

...

@Bean
public IntegrationFlow controlBusFlow() {
    return IntegrationFlow.from(ControlBusGateway.class)
            .controlBus()
            .get();
}

接口方法的所有代理都随通道一起提供,用于将消息发送到 中的下一个集成组件。 您可以使用注释标记服务接口,并使用注释标记方法。 尽管如此,the 还是被 中的下一个组件的内部通道忽略并覆盖。 否则,使用 创建此类配置将没有意义。IntegrationFlow@MessagingGateway@GatewayrequestChannelIntegrationFlowIntegrationFlowspring-doc.cn

默认情况下, a 获取常规的 bean 名称,例如 . 您可以使用 attribute 或重载的 factory method 来更改该 ID。 此外,接口上标注中的所有属性都将应用于 target 。 当注释配置不适用时,该变体可用于为目标代理提供适当的选项。 此 DSL 方法从版本 5.2 开始可用。GatewayProxyFactoryBean[FLOW_BEAN_NAME.gateway]@MessagingGateway.name()IntegrationFlow.from(Class<?> serviceInterface, Consumer<GatewayProxySpec> endpointConfigurer)@MessagingGatewayGatewayProxyFactoryBeanConsumer<GatewayProxySpec>spring-doc.cn

使用 Java 8,您甚至可以创建具有接口的集成网关,如下例所示:java.util.functionspring-doc.cn

@Bean
public IntegrationFlow errorRecovererFlow() {
    return IntegrationFlow.from(Function.class, (gateway) -> gateway.beanName("errorRecovererFunction"))
            .<Object>handle((p, h) -> {
                throw new RuntimeException("intentional");
            }, e -> e.advice(retryAdvice()))
            .get();
}

可以按如下方式使用:errorRecovererFlowspring-doc.cn

@Autowired
@Qualifier("errorRecovererFunction")
private Function<String, String> errorRecovererFlowGateway;