|
对于最新稳定版本,请使用 Spring Integration 7.0.0! |
处理消息流
IntegrationFlowBuilder提供顶级 API,用于生成与消息流相关的集成组件。
当集成可能通过单一流程完成(这通常如此),这非常方便。
交互集成流程实例可以通过以下方式连接消息频道实例。
默认情况下,消息流在 Spring Integration 的术语中表现为“链”。
也就是说,端点是自动且隐式地由直达频道实例。
消息流实际上并非构建成链条,这提供了更大的灵活性。
例如,如果你知道流程中的某个组件,你可以向它发送消息输入通道名称(即如果你明确定义的话)。
你也可以在流中引用外部定义的通道,以便使用通道适配器(以启用远程传输协议、文件输入输出等),而非直接通道。
因此,DSL 不支持 Spring 集成链元素,因为在这种情况下它并没有带来太多价值。
由于 Spring 集成,Java DSL 生成的豆定义模型与其他配置选项相同,且基于现有的 Spring 框架@Configuration基础设施,它可以与XML定义一起使用,并与Spring Integration消息注释配置结合。
你也可以定义直接集成流程通过使用 lambda 来实现实例。
以下示例展示了如何实现:
@Bean
public IntegrationFlow lambdaFlow() {
return f -> f.filter("World"::equals)
.transform("Hello "::concat)
.handle(System.out::println);
}
该定义的结果是,与隐含的直接通道连接的积分分量相同。
唯一的限制是该流起始于一个命名的直接通道——lambdaFlow.input.
此外,Lambda流不能从消息源或消息制作人.
从5.1版本开始,这种集成流程被包裹到代理中,以暴露生命周期控制并提供对输入通道内部关联的标准集成流程.
从版本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,用于解析日志或在某些分析工具中将组件分组,以及避免运行时同时注册集成流时出现竞态。
更多信息请参见动态集成和运行时集成流程。