IntegrationFlow
作为网关
IntegrationFlow
可以从提供 GatewayProxyFactoryBean
组件的服务接口开始,如以下示例所示:
public interface ControlBusGateway {
void send(String command);
}
...
@Bean
public IntegrationFlow controlBusFlow() {
return IntegrationFlow.from(ControlBusGateway.class)
.controlBus()
.get();
}
接口方法的所有代理都提供了通道,用于将消息发送到 IntegrationFlow
中的下一个集成组件。
您可以使用 @MessagingGateway
注解标记服务接口,并使用 @Gateway
注解标记方法。
然而,requestChannel
会被忽略,并被 IntegrationFlow
中下一个组件的内部通道覆盖。
否则,使用 IntegrationFlow
创建这样的配置没有意义。
默认情况下,GatewayProxyFactoryBean
会获得一个常规的 bean 名称,例如 [FLOW_BEAN_NAME.gateway]
。
您可以使用 @MessagingGateway.name()
属性或重载的 IntegrationFlow.from(Class<?> serviceInterface, Consumer<GatewayProxySpec> endpointConfigurer)
工厂方法更改该 ID。
此外,接口上 @MessagingGateway
注解中的所有属性都应用于目标 GatewayProxyFactoryBean
。
当注解配置不适用时,可以使用 Consumer<GatewayProxySpec>
变体为目标代理提供适当的选项。
此 DSL 方法从 5.2 版本开始可用。
使用 Java 8,您甚至可以使用 java.util.function
接口创建集成网关,如以下示例所示:
@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();
}
errorRecovererFlow
可以按如下方式使用:
@Autowired
@Qualifier("errorRecovererFunction")
private Function<String, String> errorRecovererFlowGateway;