|
对于最新稳定版本,请使用 Spring Integration 7.0.0! |
DSL 基础知识
这org.springframework.integration.dsl包包含IntegrationFlowBuilder前面提到的API,以及一些IntegrationComponentSpec实现,同时也是构建者,并提供流畅的API来配置具体端点。
这IntegrationFlowBuilder基础设施为基于消息的应用(如通道、端点、轮询器和通道拦截器)提供了通用的企业集成模式(EIP)。
- 重要
-
这
IntegrationComponentSpec是工厂豆实现,因此其getObject()方法不得从豆定义中调用。 这IntegrationComponentSpecBEAN定义的实现必须保持原样,框架将管理其生命周期。 Bean方法对目标的参数注入IntegrationComponentSpec类型(a工厂豆值)必须用于集成流程用豆子定义代替豆子方法引用。
端点在DSL中以动词表示以提高可读性。 以下列表包括常见的DSL方法名称及相关的EIP端点:
-
变革→
转换器 -
滤→
Filter -
处理→
服务激活器 -
分裂→
分配器 -
总计 →
聚合 -
路线→
路由器 -
桥→
桥
从概念上讲,集成过程是通过将这些端点组合成一个或多个消息流来构建的。
注意,EIP并未正式定义“消息流”一词,但将其视为使用已知消息模式的工作单元是有用的。
DSL提供了集成流程组件 来定义通道及其间端点的组合,但现在集成流程仅在应用上下文中扮演配置角色,填充真实豆子,运行时不使用。
然而,豆子的集成流程可以自动接线为生命周期控制开始()和停止()对整个流程,该流程委托给所有与此关联的春季集成组件集成流程.
以下示例使用了集成流程流畅API用于定义集成流程通过使用 EIP 方法进行豆子IntegrationFlowBuilder:
@Bean
public IntegrationFlow integerFlow() {
return IntegrationFlow.from("input")
.<String, Integer>transform(Integer::parseInt)
.get();
}
这变换方法接受 lambda 作为端点参数来作消息有效载荷。
该方法的实参数为通用变换器变换器<S,T型变换器>实例。
因此,任何提供的变换器(ObjectToJsonTransformer,FileToStringTransformer, 以及其他)可以在这里使用。
被窝里,IntegrationFlowBuilder识别消息处理器以及它的端点,令消息变换处理程序和ConsumerEndpointFactoryBean分别。
再举一个例子:
@Bean
public IntegrationFlow myFlow() {
return IntegrationFlow.from("input")
.filter("World"::equals)
.transform("Hello "::concat)
.handle(System.out::println)
.get();
}
前述例子由转换器→服务激活器→Filter.
流程是“单向”的。
也就是说,它不提供回复消息,只打印有效载荷到 STDOUT。
端点通过直接通道自动布线。
|
Lambda 和
留言<?>参数在EIP方法中使用λ时,“输入”参数通常是消息有效载荷。
如果你想访问整个消息,可以使用那些过载的方法之一,该方法对
在运行时,当 相反,请使用:
|
|
豆子定义覆盖
Java DSL 可以注册 Flow 定义中内联定义对象的 beans,并且可以复用已注入的 beans。
如果内联对象定义相同的豆名和现有的豆定义,则 |