对于最新稳定版本,请使用 Spring Integration 7.0.0spring-doc.cadn.net.cn

处理消息流

IntegrationFlowBuilder提供顶级 API,用于生成与消息流相关的集成组件。 当集成可能通过单一流程完成(这通常如此),这非常方便。 交互集成流程实例可以通过以下方式连接消息频道实例。spring-doc.cadn.net.cn

默认情况下,消息流在 Spring Integration 的术语中表现为“链”。 也就是说,端点是自动且隐式地由直达频道实例。 消息流实际上并非构建成链条,这提供了更大的灵活性。 例如,如果你知道流程中的某个组件,你可以向它发送消息输入通道名称(即如果你明确定义的话)。 你也可以在流中引用外部定义的通道,以便使用通道适配器(以启用远程传输协议、文件输入输出等),而非直接通道。 因此,DSL 不支持 Spring 集成元素,因为在这种情况下它并没有带来太多价值。spring-doc.cadn.net.cn

由于 Spring 集成,Java DSL 生成的豆定义模型与其他配置选项相同,且基于现有的 Spring 框架@Configuration基础设施,它可以与XML定义一起使用,并与Spring Integration消息注释配置结合。spring-doc.cadn.net.cn

你也可以定义直接集成流程通过使用 lambda 来实现实例。 以下示例展示了如何实现: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流不能从消息源消息制作人.spring-doc.cadn.net.cn

从5.1版本开始,这种集成流程被包裹到代理中,以暴露生命周期控制并提供对输入通道内部关联的标准集成流程.spring-doc.cadn.net.cn

从版本5.0.6开始,生成的组件豆名集成流程先加上流豆和点(.)作为前缀。 例如,ConsumerEndpointFactoryBean对于.transform(“Hello ”::concat)在前一个样本中,结果为豆名lambdaFlow.o.s.i.config.ConsumerEndpointFactoryBean#0. (O.S.I.是从org.springframework.integration才能融入纸上。) 这转换器该端点的实现豆具有一个豆名lambdaFlow.transformer#0(从版本5.1开始),其中不再是完全限定的名称MethodInvokingTransformer使用类,其组件类型。 所有NamedComponent当豆子名称必须在流程中生成时。 这些生成的豆名前加上流ID,用于解析日志或在某些分析工具中将组件分组,以及避免运行时同时注册集成流时出现竞态。 更多信息请参见动态集成和运行时集成流程spring-doc.cadn.net.cn