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

使用消息流

IntegrationFlowBuilder提供了一个顶级 API 来生成连接到消息流的集成组件。 当您的集成可以通过单个流程完成时(通常情况下),这很方便。 交互IntegrationFlow实例可以通过以下方式加入MessageChannel实例。spring-doc.cadn.net.cn

默认情况下,MessageFlow在 Spring Integration 术语中表现为“链”。 也就是说,端点由DirectChannel实例。 消息流实际上并没有被构造为链,这提供了更大的灵活性。 例如,如果您知道流中的任何组件,则可以向流中的任何组件发送消息inputChannelname (也就是说,如果您显式定义了它)。 您还可以在流中引用外部定义的通道,以允许使用通道适配器(以启用远程传输协议、文件 I/O 等)而不是直接通道。 因此,DSL 不支持 Spring Integrationchain元素,因为它在这种情况下不会增加太多价值。spring-doc.cadn.net.cn

由于 Spring Integration Java DSL 生成与任何其他配置选项相同的 bean 定义模型,并且基于现有的 Spring Framework@Configuration基础设施,它可以与 XML 定义一起使用,并与 Spring Integration 消息传递注释配置连接。spring-doc.cadn.net.cn

您还可以定义直接IntegrationFlow实例。 以下示例显示了如何执行此作:spring-doc.cadn.net.cn

@Bean
public IntegrationFlow lambdaFlow() {
    return f -> f.filter("World"::equals)
                   .transform("Hello "::concat)
                   .handle(System.out::println);
}

此定义的结果是使用隐式直接通道连接的同一组集成组件。 这里唯一的限制是此流是从命名的直接通道启动的 -lambdaFlow.input. 此外,Lambda 流不能从MessageSourceMessageProducer.spring-doc.cadn.net.cn

从 5.1 版本开始,这种IntegrationFlow被包装到代理中,以公开生命周期控制并提供对inputChannel的内部关联StandardIntegrationFlow.spring-doc.cadn.net.cn

从 V5.0.6 开始,为IntegrationFlow包括 flow bean 后跟一个点 (.) 作为前缀。 例如,ConsumerEndpointFactoryBean对于.transform("Hello "::concat)在前面的示例中,导致 bean 名称为lambdaFlow.o.s.i.config.ConsumerEndpointFactoryBean#0. (这o.s.i是从org.springframework.integration以适合页面。 这Transformer该端点的实现 Bean 的 Bean 名称为lambdaFlow.transformer#0(从 5.1 版开始),其中不是MethodInvokingTransformerclass,则使用其组件类型。 相同的模式应用于所有NamedComponents 当必须在流中生成 Bean 名称时。 这些生成的 bean 名称前面加上流 ID,用于解析日志或在某些分析工具中将组件分组在一起等目的,以及避免在运行时同时注册集成流时出现竞争条件。 有关详细信息,请参阅动态和运行时集成流spring-doc.cadn.net.cn