領先一步
VMware 提供培訓和認證,以加速您的進步。
瞭解更多昨天我在 OSGi DevCon 歐洲大會上發言,討論如何使用 Spring Integration 和 dm Server 以務實的方式解決大型應用程式中的常見問題。 在我的演講前後,我和一些人進行了交談,他們希望獲得更多關於這些想法的資訊。 這篇部落格將概述我所談論的內容。
我將直接切入正題,總結一下演講內容。
任何專案都會在其活躍開發的生命週期中增長。 通常,開發人員透過新增程式碼來新增功能並修復產品所有者提出的問題。 這個過程自然會增加程式碼庫。 隨著原始碼的增長,維護和修復錯誤通常變得更加困難。 如果不加以處理,此過程最終將導致我所說的程式碼超新星。 正確的模組化可以對抗這種不受控制的增長和最終的崩潰,而 OSGi 是目前可用的更引人注目的藥物之一。
我談到的第二個問題是單執行緒崩潰。 在像 Tomcat 這樣的 Servlet 容器中,這可以透過使用執行緒池來為客戶端提供服務來緩解,但是如果單個請求代表一個大型作業,則在單個執行緒中執行它是浪費的。 對於更昂貴的服務呼叫,您需要劃分工作。 此外,在批處理或中介軟體聚焦的系統中,您將無法奢侈地依賴 Web 容器來為您進行執行緒管理,因此您必須自己解決問題,或使用一個好的框架。
第三,模組化會對系統的響應時間產生負面影響。 這尤其適用於引入網路邊界的模組化。 即使沒有延遲,服務呼叫的結果也可能包含許多後續步驟,因此簡單地等待它再呈現響應需要太長時間。
後兩個問題透過訊息傳遞解決,而 OSGi 在將網路延遲保持在最低限度方面起著重要作用。
如果您想獲得一些背景資訊,請檢視簡報。
我做了一個 (簡單的) 示例系統的演示,以及如何使用 SpringSource Tool Suite、dm Server 和 Spring Integration 進行開發。 我已經在之前的部落格中詳細介紹了這個想法(參見 dm Server 上的 Spring Integration),所以在這裡我不會重複。 我選擇了一個與當時我使用的城鎮叫賣者不同的領域。 這是關於一輛公共汽車,有一個司機和一些乘客...... 我被告知幾次應該有一個嚴肅的例子,但我似乎無法控制自己。 也許您可以成為實施虛假股票交易系統並將其提交給 Spring Integration 示例的人? 我很喜歡做演示,它甚至有 Twitter!
只需一些片段,您就可以構建自己的 Twitter 整合。 我以前見過這方面的技術,但我再也找不到了,無論如何,這很簡單。 Twitterer
import java.util.concurrent.atomic.AtomicInteger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.integration.annotation.MessageEndpoint;
import twitter4j.Twitter;
import twitter4j.TwitterException;
@MessageEndpoint
public class Twitterer {
@Autowired
Twitter twitter;
private AtomicInteger counter = new AtomicInteger(0);
public void tweet(String tweet) {
if (counter.incrementAndGet() < 3) {
try {
twitter.updateStatus("Announcement: \" " +
tweet + "\"");
} catch (TwitterException e) {
throw new RuntimeException(e);
}
}
}
}
在應用程式上下文中(為了簡潔起見,省略了名稱空間)
<integration:outbound-channel-adapter ref="twitterer"
method="tweet" channel="intercom" />
<context:property-placeholder
location="classpath:/passenger/twitter.properties" />
<beans:bean id="twitter" class="twitter4j.Twitter"
p:userId="${twitter.user}"
p:password="${twitter.password}" />
Twitterer 負責發推文。 實際上,您可以將其替換為訊息過濾器,但我不會建議將通道介面卡直接連線到 twitter4j.Twitter.updateStatus(..) 方法。 如果你想看看會發生什麼,請看這裡。
如果您想知道 twitter4j 捆綁包在哪裡,我只是使用 SpringSource Tool Suite 中的 Bundlor 整合自己建立了它。 我花了不到 20 分鐘,而且 完全無痛。 顯然,有一個 問題已提交,因此它將在未來新增到我們的儲存庫中。
我希望您能理解這些想法,並在我不完整的地方進行補充。 我現在要去航海了,所以我的回覆必須等到我完成之後,但不要讓這阻止你。 一如既往地感謝您的反饋。