Java DSL for Spring Integration 1.2 M1 和 1.1.3 版本已推出

發佈 | Artem Bilan | 2016 年 7 月 8 日 | ...

我很高興宣佈 Spring Integration 的 Java DSL 1.2 M1 現已推出!

首先,我要感謝所有建立 issue、提出 Pull Requests、提供回饋或僅在 StackOverflow 上提問的人。沒有社群,我們不可能成為今天如此成功的專案!

org.springframework.integration:spring-integration-java-dsl:1.2.0.M1 構件可在 Milestone repo 中找到。所以,試用一下,並隨時提出 GH issue 以獲得任何回饋!

目前迭代的一些亮點

Apache Kafka 0.9 支援

基於最近發佈的 Spring for Apache Kafka 專案,引入了一個新的 Kafka09 工廠。這是簡單明瞭的 Java DSL 工廠,用於產生 IntegrationComponentSpec fluent API builders,適用於基於 Spring for Apache Kafka 基礎的 adapters。 為了向後相容,仍然存在用於 Apache Kafka 0.8 支援的現有 Kafka 工廠。

執行階段流程註冊

在許多情況下,最好根據系統狀態甚至在某些業務功能調用期間指定集成流程。 甚至使其在執行後失效。 為此,引入了 IntegrationFlowContext 組件,以允許手動 IntegrationFlow 控制。

@Autowired
private IntegrationFlowContext context;
...

IntegrationFlow myFlow = f -> f
  			.<String, String>transform(String::toUpperCase)
   			.transform("Hello, "::concat);

String flowId = this.context.register(myFlow);
MessagingTemplate messagingTemplate = this.context.messagingTemplateFor(flowId);

assertEquals("Hello, SPRING",
            messagingTemplate.convertSendAndReceive("spring", String.class));

this.context.remove(flowId);

有關更多資訊,請參閱 IntegrationFlowContext JavaDocs。

Operator log()

為了方便地以 Spring Integration 的方式記錄訊息傳輸過程 (a-la <logging-channel-adapter>),引入了一個新的 log() operator。 在底層,它僅由 WireTap ChannelInterceptorLoggingHandler 作為訂閱者表示。 它負責記錄傳入下一個端點的訊息

.filter(...)
.log(LoggingHandler.Level.ERROR, "test.category", m -> m.getHeaders().getId())
.route(...)

在此範例中,只有在訊息通過篩選器之後且在路由之前,才會以 ERROR 層級將 id 標頭記錄到 "test.category"。

MessageChannelSpec.wireTap()

已為 MessageChannelSpec builders 引入了 .wireTap() fluent API。 現在,目標配置可以從 Java DSL 的使用中獲得更多好處

@Bean
public QueueChannelSpec myChannel() {
    return MessageChannels
            .queue()
            .wireTap("loggingFlow.input");
}

@Bean
public IntegrationFlow loggingFlow() {
    return f -> f.log();
}

Typed routers

對於 bean 的純 Java 實例化來說,將路由鍵作為任何所需的類型並避免將所有內容轉換為 String 似乎已經足夠有機。 此外,類型放寬讓我們可以將配置作為泛型感知

@Bean
public IntegrationFlow payloadTypeRouteFlow() {
    return f -> f
          .<Object, Class>route(Object::getClass, m -> m
                         .channelMapping(String.class, "stringsChannel")
                         .channelMapping(Integer.class, "integersChannel"));
}

有關 1.2.0.M1 版本的更多資訊,請參閱 commit history

錯誤修正

維護版本 1.1.3 也已發佈,其中包含多個嚴重的錯誤修正和 Spring Integration 4.3 相容性。 org.springframework.integration:spring-integration-java-dsl:1.1.3.RELEASE 構件可在 repo.spring.ioMaven Central 中找到。 建議所有人升級,尤其是在您使用 JMS 工廠和實作 ApplicationListener 的 bean 時。

下一步

我們預計很快就會推出版本 1.2 的下一個 Milestone 2,大約幾週後,並在 8 月中旬左右推出 RC 和正式版本。 同時,我們將把 spring-integration-java-dsl 專案吸收到版本 5.0 和 Java 8 代碼庫的 Spring Integration Core 中。 目前的 1.2 版本仍將受到支援,但僅用於錯誤修正。

專案頁面 | 文件 | Issue | 說明

取得 Spring 電子報

隨時關注 Spring 電子報

訂閱

取得領先

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

瞭解更多

取得支援

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

瞭解更多

即將舉辦的活動

查看 Spring 社群中所有即將舉辦的活動。

檢視全部