领先一步
VMware 提供培训和认证,以加快您的进度。
了解更多我们高兴地宣布 Spring Integration 4.0 发布候选版本 (4.0.0.RC1) 现已可用。请使用 里程碑存储库(Maven 或 Gradle),下载 发行版归档文件,或查看项目 主页 以获取更新文档和 Maven/Gradle 配置详情的链接。
此版本包含多个错误修复、一些新功能以及在 4 月底即将发布的 GA 版本中的进一步改进。
以下是自 上次里程碑版本 以来的主要更改摘要
@Poller 和 @InboundChannelAdapter
基于在 M4 版本 中宣布的对注解支持的大量改进,已向每个消息注解 (@ServiceActivator
、@Router
等) 添加了新的 @Poller
注解。@Poller
注解属性允许配置消息注解 inputChannel
的 poller
选项。这允许带注解的端点成为 PollingConsumer
。以前,带注解的端点只能使用 SubscribableChannel
并由事件驱动。
这也使我们能够引入 @InboundChannelAdapter
方法消息注解。例如,现在可以在不使用 XML 的情况下,在 Spring Boot 应用程序中对其进行配置。
@EnableAutoConfiguration // enables integration infrastructure
@MessageEndpoint // makes this class as an integration component
@PropertySource("classpath:integration.properties") // property-placeholder configuration
public class Integration {
public static void main(String[] args) throws Exception {
ConfigurableApplicationContext ctx = SpringApplication.run(Integration.class, args);
Thread.sleep(10000);
ctx.close();
}
@InboundChannelAdapter(value = "countChannel",
poller = @Poller(fixedDelay = "${poller.interval}", maxMessagesPerPoll = "1"))
public Integer count() {
return this.counter.incrementAndGet();
}
@ServiceActivator(inputChannel="countChannel")
public void foo(Integer payload) {
System.out.println(payload);
}
}
这相当于以下 XML 配置
<int:inbound-channel-adapter channel="countChannel" ref="counter" method="incrementAndGet">
<int:poller fixed-delay="${poller.interval}" max-messages-per-poll="1"/>
</int:inbound-channel-adapter>
<int-stream:stdout-channel-adapter id="countChannel"/>
分布式 MetadataStore 和 LockRegistry
MetadataStore
用于存储各种类型的通用元数据(例如,已处理的最后一个 feed 条目的发布日期),以帮助组件(例如 Feed Adapter
)维护状态并避免重复。对于分布式环境和多实例应用程序,以及为了在应用程序重启时维护持久性元数据状态,本版本引入了 RedisMetadataStore
和 GemfireMetadataStore
。
例如,可以使用 FileSystemPersistentAcceptOnceFileListFilter
配置 <int-file:inbound-channel-adapter>
,该过滤器可以配置为使用这些分布式 MetadataStore
之一。这允许在多个应用程序实例之间共享 filter keys
,或者当多个服务器使用网络文件共享时。
对于类似的分布式(跨 JVM)环境,当只有一个实例可以访问对象时(例如,消息到达时 AggregatorHandler
用于 MessageGroup
),引入了分布式 LockRegistry
实现 - RedisLockRegistry
和 GemfireLockRegistry
。
Aggregator 自动组释放
<aggregator>
和 <resequencer>
端点现在可以具有 group-timeout
或 group-timeout-expression
选项,以允许这些关联端点在组空闲一段时间后采取行动。以前,您必须为此目的配置外部 MessagGroupStoreReaper
。groupTimeout
属性安排在 Message
到达后一段时间强制完成 MessageGroup
,而该事件不会导致 ReleaseStrategy
释放组。
从这个角度来看,可能更有趣的是 group-timeout-expression
。它允许根据消息到达时组的状态在运行时动态确定 groupTimeout
值。例如
<aggregator input-channel="input" output-channel="output" discard-channel="discard"
send-partial-result-on-expiry="true"
group-timeout-expression="size() ge 2 ? 1000 : -1"
release-strategy="someReleaseStrategy"/>
在这种情况下,如果组中只有一个消息,则组将永远不会超时,但只要组中至少包含 2 个消息,Aggregator
就会在空闲 1 秒后自动发送部分 MessageGroup
。
优先级通道和消息存储
在此版本中,您可以使用外部 MessageStore
配置 <priority-queue>
。为此,我们引入了新的 PriorityCapableChannelMessageStore
策略,并提供了 JDBC、Redis 和 MongoDB 的实现。这现在允许在优先级通道中持久化消息。
Twitter 搜索网关
现有的 twitter <search-inbound-channel-adapter>
每次轮询只能执行固定查询。为了提高灵活性,已添加 <int-twitter:search-outbound-gateway/>
组件以基于 search-args-expression
执行任意请求/回复 Twitter 搜索操作。默认值为 payload
,它可以是搜索字符串或 org.springframework.social.twitter.api.SearchParameters
的实例。但是,此属性可以在 SpEL 中配置为
"new SearchParameters(payload).count(5).sinceId(headers.sinceId)"
或
"{payload, 30}"
作为 SpEL 内联列表 - 在这种情况下为查询字符串和页面大小,或者...
"{payload, headers.pageSize, headers.sinceId, headers.maxId}"
org.springframework.social.twitter.api.SearchOperations#search
的四个参数。有关更多信息,请参阅 Spring Social Twitter 文档。
总结
有关更改的完整列表,请参阅新组件的 发行说明、新增功能 和 Java 文档。
我们期待您尽快发表评论和反馈 (Spring 论坛、StackOverflow (spring-integration
标签)、Spring JIRA) 并报告您在月底 GA 之前发现的问题。
SpringOne 2GX 2014 即将到来
尽快预订您在 德克萨斯州达拉斯的 SpringOne(9 月 8 日至 11 日)的席位。这是了解所有最新动态并提供直接反馈的最佳机会。今年预计会有许多重要的全新公告。我们预计将推出多个深入的 Spring Integration 会议。