搶佔先機
VMware 提供培訓和認證,以加速您的進步。
瞭解更多我們很高興地宣佈 Spring Integration 4.0 釋出候選版本 (4.0.0.RC1) 現已可用。請使用 Milestone 倉庫 與 Maven 或 Gradle,下載 分發存檔,或檢視專案主頁,以獲取更新的文件以及 Maven/Gradle 配置詳細資訊。
此版本包含多個錯誤修復、一些新功能以及進一步的改進,GA 版本將於四月底釋出。
以下是自 上次里程碑 以來的一些主要變更摘要
@Poller 和 @InboundChannelAdapter
在 M4 版本 中宣佈的對註解支援的廣泛改進的基礎上,新的 @Poller
註解已新增到每個訊息傳遞註解 (@ServiceActivator
, @Router
等) 中。@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>
和 <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"/>
在這種情況下,如果組中只有 1 條訊息,則該組將永遠不會超時,但是隻要該組包含至少 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 會議。