領先一步
VMware 提供培訓和認證,以加速您的進度。
了解更多昨天早上,我在 The Spring Experience 上發表了一場分為兩部分的演講,主題為「使用 Spring 的企業整合模式」。第一場演講包括 Spring 對企業整合的核心支援概觀,包括 JMS、遠端處理、JMX、排程和電子郵件。該演講還包括對 Gregor Hohpe 和 Bobby Woolf 在同名書籍中介紹的幾個 企業整合模式 的高階討論。在第二場演講中,我正式發布了「Spring Integration」 - Spring 產品組合的新成員。Spring Integration 以 Spring 的核心支援為基礎,同時提供更高層級的抽象,很大程度上受到這些模式的啟發。在這裡,我想簡要概述我在那次會議中討論的主題。您也可以閱讀昨天在 eWeek 和 InfoWorld 上發表的兩篇關於 Spring Integration 的文章。
首先,我描述了 Spring Integration 的目標和動機 - 也就是說,實作模型應該簡單且非侵入性 - 提供與核心 Spring 原則的哲學一致性。業務元件應與底層訊息傳遞基礎結構分離,因此可以在隔離狀態下進行測試。該框架應隱藏執行緒管理的複雜性,同時仍然可以完全配置執行緒池、佇列容量和排程參數。自訂擴充點應提供為定義良好的策略介面。應該可以使用動態語言進行整合邏輯,例如路由和轉換。配置選項應包括通用 XML、特定領域的命名空間支援和註解。在建構這些核心 Spring 原則的基礎上,實作將利用核心 Spring 功能,包括生命週期管理、任務執行、面向切面程式設計、事務管理、動態語言支援、JMS、遠端處理、郵件和排程。
透過遵循這些目標和動機,Spring Integration 將簡化企業整合解決方案的開發。由於概念和實作非常一致,因此對於開始探索 SOA 和 EDA 的現有 Spring 使用者來說,它將促進增量採用。最後,作為 Spring 產品組合的成員,它將提供與 Spring 產品組合中其他產品的無縫相容性和及時的共同發展。
在討論這些目標和動機之後,我逐步介紹了 API。核心元件是 Message、MessageChannel 和 MessageEndpoint。Message 是一種用於任何類型資料的容器,以及提供通用訊息傳遞屬性(ID、關聯 ID、到期日、傳回地址、序列資訊等)的標頭。MessageChannel 提供傳送和接收方法,這些方法接受逾時。接收方法也接受 MessageSelector,其中包含一個方法:boolean accept(Message message)。以下是 MessageChannel 的基本介面定義
public interface MessageChannel {
boolean send(Message message);
boolean send(Message message, long timeout);
Message receive();
Message receive(long timeout);
Message receive(MessageSelector selector);
Message receive(MessageSelector selector, long timeout);
}
MessageEndpoint 將 MessageHandler 連接到傳入的 MessageChannel 和/或傳出的 MessageChannel。MessageHandler 是一個通用介面,為轉換器、路由器和任何其他處理傳入訊息的元件提供基礎。
public interface MessageHandler {
Message handle(Message message);
}
通道配接器用於傳送和接收來自外部資料來源的資料。例如,要傳送 JMS 訊息,則提供 OutboundJmsChannelAdapter。在配置訊息傳遞系統時,可以像傳送另一個通道一樣將訊息傳送到該配接器。MessageBus 將各種端點和通道連接在一起。這與 Spring ApplicationContext 連接物件的方式一致。事實上,MessageBus 本身就是一個 ApplicationContextAware 物件,並從其上下文中檢測各種訊息傳遞元件。這與 Spring MVC 應用程式中 DispatcherServlet 的行為非常相似。Spring Integration 的命名空間支援提供了一種簡潔的配置元件的方式
<integration:message-bus/>
<integration:channel id="quotes"/>
<integration:endpoint input-channel="quotes" handler-ref="logger" handler-method="log">
<integration:consumer period="1000"/>
</integration:endpoint>
或者,也支援註解
@MessageEndpoint(input=“inputChannel”, defaultOutput=“outputChannel”)”
public class SimpleAnnotatedEndpoint {
@Handler
public String sayHello(String name) {
return "Hello " + name;
}
}
也將支援用於轉換和路由的註解(例如 @Router、@Splitter 和 @Aggregator)。此外,如果處理程式傳回訊息並且該訊息未提供自己的「傳回地址」,則可以使用註解建立「通道配接器」,例如用於輸入的 @Polled 和用於輸出的 @DefaultOutput。例如,以下端點將每 5 秒印出「Hello World」
@MessageEndpoint
public class SampleAnnotatedEndpoint {
@Polled(period=5000)”
public String getName() {
return "World";
}
@Handler
public String sayHello(String name) {
return "Hello " + name;
}
@DefaultOutput
public void display(String message) {
System.out.println(message);
}
}
@MessageEndpoint 也與 Spring 2.5 的新元件偵測功能「開箱即用」。因此,上述範例根本不需要任何 XML 配置。對於更簡單的為單個方法建立端點的方式,您可以在該方法上使用 @Subscriber 註解
@Subscriber(channel=“testChannel”)”
public void test(String s) {
â¦
}
透過 Spring Integration 命名空間中的單個 'annotation-driven' 元素啟用該註解和相應的 @Publisher。@Publisher 以 Spring AOP 為基礎,以便發布方法的傳回值。它還將支援其他建議類型,例如 'before' 和 'after-throwing'。
上述範例基於 Spring Integration 的 0.5 版本。因此,這些介面和註解可能會發生變更。事實上,我們特別感興趣在此早期階段獲得回饋。我已經與 The Spring Experience 的與會者進行了幾次有趣的討論,他們對這個新產品的可能性感到非常興奮。1.0 Milestone 1 版本將於 1 月初推出,1.0 Final 版本將於 2008 年第二季度推出。1.0 Final 版本將支援多種配置格式(XML、命名空間和註解)、點對點和發布/訂閱通道,以及多個配接器(至少:JMS、RMI、HttpInvoker、Hessian/Burlap、檔案、電子郵件、JDBC、串流和 Spring ApplicationEvents)。它還將與 Spring 的事務管理和動態語言支援無縫協作。最後,它將與 Spring 產品組合中的其他產品整合,例如 Spring Web Services、Spring Web Flow、Spring MVC、Spring Batch 和 Spring Security。當然,我們也將與 Spring Dynamic Modules 專案密切合作,以 OSGi 啟用訊息傳遞元件。
請繼續關注此部落格,以了解更多資訊,包括代碼儲存庫的公開可用性。此外,請務必閱讀昨天在 eWeek 和 InfoWorld 上發表的文章。