領先一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多昨天我在OSGi DevCon Europe上發表演講,內容是關於如何使用Spring Integration和dm Server以務實的方式解決大型應用程式中的常見問題。在我的演講前後,我與許多人進行了交流,他們希望獲得更多關於這些想法的資訊。這篇部落格將概述我所談論的內容。
我將直接概述演示內容。
任何專案在其活躍開發生命週期中都會不斷發展。通常,開發人員透過新增程式碼來增加功能並修復產品所有者提出的問題。這個過程自然會使程式碼庫增長。隨著原始碼的增長,維護和修復 bug 通常會變得更加困難。如果處理不當,這個過程最終將導致我所說的“程式碼超新星”。這種不受控制的增長和最終的崩潰可以透過適當的模組化來對抗,而 OSGi 是目前可用的更具說服力的“良藥”之一。
我談到的第二個問題是單執行緒崩潰。在像 Tomcat 這樣的 Servlet 容器中,這可以透過使用執行緒池來服務客戶端來緩解,但如果單個請求代表一項大型作業,那麼在一個執行緒中執行它就是浪費。對於更昂貴的服務呼叫,你需要劃分工作。此外,在批處理或以中介軟體為中心的系統中,你沒有奢侈地依賴 Web 容器為你進行執行緒管理,因此你必須自己處理問題,或使用一個好的框架。
第三,模組化將對系統的響應時間產生負面影響。這對於引入網路邊界的模組化尤其如此。即使沒有延遲,服務呼叫的結果也可能需要很多後續步驟,以至於在渲染響應之前等待它會耗時太長。
後兩個問題透過訊息傳遞解決,而 OSGi 在將引入的網路延遲降至最低方面發揮著重要作用。
如果你想了解一些背景知識,請檢視簡報。
我做了一個關於一個(簡單的)系統示例的演示,以及如何使用 SpringSource Tool Suite、dm Server 和 Spring Integration 來開發它。我已經在之前的部落格中詳細闡述了這個想法(參見 dm Server 上的 Spring Integration),所以這裡不再贅述。我選擇了一個與我當時使用的城市叫賣者不同的領域。它是一個關於一輛公交車,有一個司機和一些乘客的故事……有人告訴我幾次應該有一個嚴肅的例子,但我似乎忍不住。也許 你 可以成為實現一個虛假股票交易系統並將其提交到 Spring Integration 示例的人?無論如何,我非常喜歡做這個演示,它甚至還有推特!
只是一些片段,這樣你就可以構建自己的推特整合。我以前見過這方面的先行工作,但我找不到了,反正這也很簡單。推特傳送器
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}" />
推特傳送器負責傳送推文。你實際上可以用一個訊息過濾器替換它,但我不建議將通道介面卡直接連線到 twitter4j.Twitter.updateStatus(..) 方法。如果你想看看會發生什麼,請看 這裡。
如果你想知道 twitter4j 捆綁包在哪裡,我只是使用 SpringSource Tool Suite 中的 Bundlor 整合自己建立了它。我只用了不到 20 分鐘,而且 完全沒有痛苦。顯然,有一個關於此的未解決問題,因此它將在未來新增到我們的儲存庫中。
我希望你能理解這些想法,並在我有所不足之處加以補充。我現在要去航海了,所以我的回覆需要等到我完成之後,但不要讓這阻礙你。一如既往,非常感謝反饋。