訊息傳遞於歐洲 OSGi 開發者大會與 OSGi 相遇

工程 | Iwein Fuld | 2009年6月23日 | ...

昨天我在歐洲 OSGi 開發者大會上發表演講,內容是關於以務實的方式使用 Spring Integration 和 dm Server 來解決大型應用程式中的常見問題。在我的演講之前和之後,我與許多人交談,他們希望更詳細地了解這些想法。這篇部落格文章將概述我演講的內容。

我將直接進入演講的摘要。

任何專案在其活躍開發的生命週期中都會成長。通常開發人員會透過新增程式碼來新增功能並修正產品負責人提出的問題。這個過程自然會擴大程式碼庫。隨著原始碼的增長,維護和修正錯誤通常會變得更加困難。如果不及時處理,這個過程最終會導致我稱之為「程式碼超新星」的現象。這種不受控制的成長和最終的崩潰,可以透過適當的模組化來對抗,而 OSGi 是目前可用的更具吸引力的解決方案之一。

我談到的第二個問題是單執行緒崩潰。在像 Tomcat 這樣的 Servlet 容器中,這可以透過使用執行緒池來服務客戶端來緩解,但是如果單個請求代表一個大型作業,則在單個執行緒中運行它是浪費的。對於更昂貴的服務調用,您需要劃分工作。此外,在批次或以中介軟體為中心的系統中,您將無法奢望依賴 Web 容器為您進行執行緒管理,因此您必須自己處理問題,或使用良好的框架。

第三,模組化將對系統的回應時間產生負面影響。對於引入網路邊界的模組化而言,尤其如此。即使沒有延遲,服務調用的結果也可能包含許多後續步驟,以至於在呈現回應之前等待時間太長。

後兩個問題可以透過訊息傳遞來解決,而 OSGi 在盡可能減少引入的網路延遲方面發揮著重要作用。

如果您想了解一些背景資訊,請查看簡報。

我展示了一個(簡化的)系統範例,以及如何使用 SpringSource Tool Suite、dm Server 和 Spring Integration 開發它。我已經在前一篇部落格文章中詳細介紹了這個想法(請參閱 Spring Integration on dm Server),所以我不會在這裡重複。我選擇了一個與我當時使用的城鎮公告員不同的領域。它是關於一輛公車,有司機和一些乘客... 有人告訴我幾次應該有一個嚴肅的例子,但我似乎無法控制自己。也許可以成為實作一個虛假的股票交易系統並將其提交到 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 分鐘,而且完全沒有任何痛苦。顯然,有一個問題已開啟,因此它將在未來添加到我們的儲存庫中。

我希望您能理解這些想法,並在我不完善的地方加以補充。我現在要去航海了,所以我的回覆必須等到我完成後才能回覆,但不要讓這阻止您。一如既往,非常感謝您的回饋。

取得 Spring 電子報

隨時掌握 Spring 電子報的最新資訊

訂閱

領先一步

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

了解更多

取得支援

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

了解更多

即將到來的活動

查看 Spring 社群中所有即將到來的活動。

檢視全部