Spring Integration 4.0 釋出候選版本

釋出 | Artem Bilan | 2014 年 4 月 15 日 | ...

我們很高興地宣佈 Spring Integration 4.0 釋出候選版本 (4.0.0.RC1) 現已可用。請使用 Milestone 倉庫 與 Maven 或 Gradle,下載 分發存檔,或檢視專案主頁,以獲取更新的文件以及 Maven/Gradle 配置詳細資訊。

此版本包含多個錯誤修復、一些新功能以及進一步的改進,GA 版本將於四月底釋出。

以下是自 上次里程碑 以來的一些主要變更摘要

@Poller 和 @InboundChannelAdapter

M4 版本 中宣佈的對註解支援的廣泛改進的基礎上,新的 @Poller 註解已新增到每個訊息傳遞註解 (@ServiceActivator, @Router 等) 中。@Poller 註解屬性允許配置訊息傳遞註解的 inputChannelpoller 選項。這允許帶註解的端點成為 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)維護狀態並避免重複。 對於分散式環境和多例項應用程式,並且為了使永續性元資料狀態在應用程式重新啟動時得以維護,此版本引入了 RedisMetadataStoreGemfireMetadataStore

例如,可以使用 FileSystemPersistentAcceptOnceFileListFilter 配置 <int-file:inbound-channel-adapter>,該過濾器可以配置為使用這些分散式 MetadataStore 之一。 這允許在多個應用程式例項之間共享 filter keys,或者當多個伺服器使用網路檔案共享時。

對於類似的分散式 (跨 JVM) 環境,當只有一個例項可以訪問物件(例如,AggregatorHandler 用於訊息到達時的 MessageGroup)時,引入了分散式 LockRegistry 實現 - RedisLockRegistryGemfireLockRegistry

聚合器自動組釋放

<aggregator><resequencer> 端點現在可以具有 group-timeoutgroup-timeout-expression 選項,以允許這些相關端點在組空閒一段時間後採取措施。 以前,您必須為此目的配置外部 MessagGroupStoreReapergroupTimeout 屬性計劃在 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 會議。

獲取 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

搶佔先機

VMware 提供培訓和認證,以加速您的進步。

瞭解更多

獲取支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案。

瞭解更多

即將舉行的活動

檢視 Spring 社群中所有即將舉行的活動。

檢視全部