2.1 和 2.2 之间的更改
新组件
2.2 版本增加了一些新组件。
RedisStore 入站和出站通道适配器
Spring Integration 现在有 RedisStore 入站和出站通道适配器,让您可以将 Message 有效负载写入 Redis 集合并从中读取。欲了解更多信息,请参阅 RedisStore 出站通道适配器 和 RedisStore 入站通道适配器。
MongoDB 入站和出站通道适配器
Spring Integration 现在有 MongoDB 入站和出站通道适配器,让您可以将 Message 有效负载写入 MongoDB 文档存储并从中读取。欲了解更多信息,请参阅 MongoDB 出站通道适配器 和 MongoDB 入站通道适配器。
一般更改
本节描述了从 2.1 版本到 2.2 版本的一般更改。
为端点添加行为
为轮询器添加 <advice-chain/> 的能力已经存在一段时间了。然而,由此添加的行为会影响整个集成流。它没有解决为单个端点添加(例如)重试的能力。2.2 版本为许多端点引入了 <request-handler-advice-chain/>。
此外,我们为此目的添加了三个标准建议类
-
MessageHandlerRetryAdvice -
MessageHandlerCircuitBreakerAdvice -
ExpressionEvaluatingMessageHandlerAdvice
欲了解更多信息,请参阅 为端点添加行为。
事务同步和伪事务
轮询器现在可以参与 Spring 的事务同步功能。这允许同步诸如入站通道适配器重命名文件等操作,具体取决于事务是提交还是回滚。
此外,当没有“真实”事务存在时,您可以通过 PseudoTransactionManager 启用这些功能。
欲了解更多信息,请参阅 事务同步。
文件适配器:改进的文件覆盖和追加处理
使用文件出站通道适配器或文件出站网关时,可以使用新的 mode 属性。在 Spring Integration 2.2 之前,如果目标文件存在,则会被替换。现在您可以指定以下选项
-
REPLACE(默认) -
APPEND -
FAIL -
IGNORE
欲了解更多信息,请参阅 处理现有目标文件。
Spring-AMQP 1.1
Spring Integration 现在使用 Spring AMQP 1.1。这使得 Spring Integration 应用程序中可以使用多种功能,包括以下内容
-
出站网关的固定回复队列
-
高可用 (HA)(镜像)队列
-
发布者确认
-
返回的消息
-
支持死信交换和死信队列
JDBC 支持 - 存储过程组件
SpEL 支持
使用 Spring Integration JDBC 适配器的存储过程组件时,您现在可以使用 Spring 表达式语言 (SpEL) 提供存储过程名称或存储函数名称。
这样做可以让您在运行时指定要调用的存储过程。例如,您可以通过消息头提供要执行的存储过程名称。欲了解更多信息,请参阅 存储过程。
JDBC 支持:通道特定消息存储实现
我们添加了一个新的消息通道特定消息存储实现,使用特定于数据库的 SQL 查询提供更具可伸缩性的解决方案。欲了解更多信息,请参阅 支持消息通道。
有序关闭
我们在 IntegrationMBeanExporter 中添加了一个名为 stopActiveComponents() 的方法。它允许 Spring Integration 应用程序以有序的方式关闭,禁止某些适配器接收新的入站消息,并等待一段时间以允许正在处理的消息完成。
ObjectToJsonTransformer
默认情况下,ObjectToJsonTransformer 现在将 content-type 头设置为 application/json。欲了解更多信息,请参阅 转换器。
HTTP 支持
Java HTTP 序列化不再默认启用。以前,当在 Serializable 对象上设置 expected-response-type 时,Accept 头未正确设置。我们更新了 SerializingHttpMessageConverter 以将 Accept 头设置为 application/x-java-serialized-object。然而,由于这可能导致与现有应用程序不兼容,我们决定不再自动将此转换器添加到 HTTP 端点。
如果您希望使用 Java 序列化,则需要使用 message-converters 属性(使用 XML 配置时)或使用 setMessageConverters() 方法(在 Java 中)将 SerializingHttpMessageConverter 添加到相应的端点。
或者,您可能希望考虑使用 JSON。通过在类路径上添加 Jackson 即可启用它。