天天看點

mule in action翻譯20 : 3.8 使用VM傳輸mule in action翻譯20 : 3.8 使用VM傳輸

mule in action翻譯20 : 3.8 使用VM傳輸

    VM傳輸是一個特殊的傳輸類型,你用它向Mule執行個體運作的JVM發送消息。通過VM endpoint發送的消息可以處理為事務性的并且可以持久化到磁盤。這使你獲得了分層式的可靠性并且解耦了流--不在需要一個外部的消息代理。

    本節将看這是如何做到的。在第9章讨論mule對事務的支援時,我們将重新使用VM傳輸實作可靠的方式。

表3.8展示了一些你可以設定的VM 傳輸的屬性。

mule in action翻譯20 : 3.8 使用VM傳輸mule in action翻譯20 : 3.8 使用VM傳輸

3.8.1 介紹VM傳輸的可靠性

    你在清單3.2中看到了Prancing Donkey如何發送支出報表到Arnor Accounting提供的URL.他們想出的方法是從檔案系統的一個共享目錄讀入支出報表然後把電子表格發送到一個URL.檔案系統和HTTP都不是事務性資源,那麼當其中一個操作失敗時将導緻支出報表的丢失。是以,我們來做把流變的可靠的第一步--使用VM傳輸解耦每個endpoint。見下面清單說明。

(圖示見3.21)

Listing 3.26 Using VM endpoints to implement reliability patterns 

<flow name="readExpensesFromFilesystemFlow">
    <file:inbound-endpoint path="./data/expenses/in" pollingFrequency="60000">
        <file:filename-regex-filter pattern=".*xls$" caseSensitive="false"/>
    </file:inbound-endpoint>
	<!--分發消息到expenses VM queue-->
    <vm:outbound-endpoint path="expenses"/>
</flow>
<flow name="postExpenses">
    <!--從expenses VM queue接收消息-->
    <vm:inbound-endpoint path="expenses"/>
    <http:outbound-endpoint host="${http.host}"
                            port="${http.port}"
                          method="POST"
                            path="expenses/prancingdonkey"/>
</flow>      
mule in action翻譯20 : 3.8 使用VM傳輸mule in action翻譯20 : 3.8 使用VM傳輸

   這種方式類似于使用JMS對流進行解耦。這樣做的好處是不會導緻管理開銷和運作JMS代理的性能開銷,并且這時消息處理是異步的。通過expenses 隊列傳送的消息将持久化到磁盤,是以出現Mule關閉或失敗事件時,這些消息仍能傳送到HTTP outbound endpoint。第9章你将看到怎麼使分發和接收都具有事務,提高兩個流的真正的可靠性。

  VM QUEUES AND FLOWS  在mule2中使用VM 隊列把服務組合起來是一種常見的方式。

        在mule3中引入的流和其支援的功能,像 flow refs 、 subflows,使得 VM傳輸

在這種情況下變的不再怎麼有用了。但它确實提供了一個可靠模式,這點我們在第7章詳談。

VM傳輸存儲消息的特性可以通過定義VM連接配接器的子項--隊列配置檔案 來進行配置。一些配置屬性

見表3.9

mule in action翻譯20 : 3.8 使用VM傳輸mule in action翻譯20 : 3.8 使用VM傳輸

清單3.27  展示了一個隊列配置檔案,關閉了持久化(所有消息儲存在記憶體)并限制了消息數量為1000.

如果你能容忍消息丢失且很關心VM隊列的吞吐量的話,關閉持久化是有用的。

  VM傳輸的交換方式  VM傳輸支援 請求-響應的交換方式 ,在這方面它表現的和JMS傳輸比較相似。

  Listing 3.27 Explicitly configuring a VM queue profile 

<vm:connector name="fastVMQueue">
<!--注釋1 定義非持久化隊列 緩沖上限是1000個消息-->
<vm:queue-profile persistent="false" maxOutstandingMessages="1000"/>
</vm:connector>      

   VM傳輸一收到消息就開始運送他們,可認為其速度比JMS快。當你調整流群組件時,請注意一點,VM隊列的重載是很容易的。參數maxOutstandingMessages 表明VM傳輸的緩存最大是1000個消息--如果消息到達的他快以至流不能及時處理時。當緩存滿時,再到達的消息将會丢失。我們将在第11章讨論調優的細節。

    使用VM傳輸給你帶來了解耦中間件、避免了管理代理的開銷。你看到了VM 傳輸如何促進了可靠模式的實作--可以使不可靠的傳輸(比如檔案、HTTP)變的可靠的技術。你也看到了如何配置 VM隊列,允許你覆寫VM傳輸的預設的隊列和持久化行為。

繼續閱讀