对于最新的稳定版本,请使用 Spring Integration 6.4.0! |
使用消息流
IntegrationFlowBuilder
提供顶级 API 以生成连接到消息流的集成组件。
当您的集成可以通过单个流完成时(通常是这种情况),这很方便。
或者,可以通过实例联接实例。IntegrationFlow
MessageChannel
默认情况下,在 Spring 集成的说法中表现为“链”。
也就是说,终端节点由实例自动隐式连接。
消息流实际上并不是作为一个链构建的,这提供了更大的灵活性。
例如,如果您知道流中的任何组件名称(即,如果您明确定义它),则可以向流中的任何组件发送消息。
您还可以在流中引用外部定义的通道,以允许使用通道适配器(以启用远程传输协议、文件 I/O 等),而不是直接通道。
因此,DSL 不支持 Spring Integration 元素,因为在这种情况下它不会增加太多价值。MessageFlow
DirectChannel
inputChannel
chain
由于 Spring 集成 Java DSL 生成与任何其他配置选项相同的 bean 定义模型,并且基于现有的 Spring Framework 基础结构,因此它可以与 XML 定义一起使用,并与 Spring 集成消息传递注释配置连接。@Configuration
您还可以使用 lambda 定义直接实例。
以下示例显示了如何执行此操作:IntegrationFlow
@Bean
public IntegrationFlow lambdaFlow() {
return f -> f.filter("World"::equals)
.transform("Hello "::concat)
.handle(System.out::println);
}
此定义的结果是与隐式直接通道连接的同一组集成组件。
此处的唯一限制是此流从命名的直接渠道 - 启动。
此外,Lambda 流不能从 或 开始。lambdaFlow.input
MessageSource
MessageProducer
从版本 5.1 开始,这种类型被包装到代理中,以公开生命周期控制并提供对内部关联的 .IntegrationFlow
inputChannel
StandardIntegrationFlow
从版本 5.0.6 开始,为 中的组件生成的 bean 名称包括流 bean,后跟一个点 () 作为前缀。
例如,前面示例中的 for the 会导致 Bean 名称 。
(这是 to fit on the page 的缩写。
该端点的实现 Bean 的 Bean 名称为(从版本 5.1 开始),其中使用其组件类型,而不是类的完全限定名称。
当必须在流中生成 bean 名称时,相同的模式将应用于所有 s。
这些生成的 Bean 名称前面加上流 ID,用于解析日志或在某些分析工具中将组件分组在一起,以及避免在运行时同时注册集成流时出现争用情况。
有关更多信息,请参阅 动态和运行时集成流 。IntegrationFlow
.
ConsumerEndpointFactoryBean
.transform("Hello "::concat)
lambdaFlow.o.s.i.config.ConsumerEndpointFactoryBean#0
o.s.i
org.springframework.integration
Transformer
lambdaFlow.transformer#0
MethodInvokingTransformer
NamedComponent