流程圖(flows)
簡介
流程圖(flow)是一種簡潔且非常靈活的機制。Mule可以靈活使用流程圖實現複雜的服務架構。通過使用流程圖,可以通過在Mule流程圖中合理的安排任意數量的元素來實現自動化集成處理或構造Mule消息處理解決方案。開發人員在流程圖中自由的實現內容,可以輕鬆的創建出滿足需求的解決方案。
什麼時候使用流程圖
Flow是Mule中最多樣和有效的集成機制
Flow適用於多種場合
-
簡單的集成任務
-
定期數據處理
-
連接雲端和本地應用
-
多種服務協同作業時的事件處理
流程圖解析
流程圖的本質是消息處理器鏈。可以把消息處理器想象成樂高積木塊,流程圖就是用這些積木塊組合而成的。流程圖可以有消息源,傳入的消息用處理器鏈進行處理。
image
流程圖配置
流程圖在xml中用<flow>元素表示。每個流程圖都有一個name屬性,一個消息源(私有流程圖沒有消息源),若干個消息處理器以及可選的異常處理策略。
基本結構
<flow name="">
- 0..1 MessageSource
- 1..n MessageProcessor(s)
- 0..1 ExceptionStrategy
</flow>
流程圖看似簡單,但是可以創造強大的應用。特別是結合Mule表達式,可以對消息內容作精細的處理。許多元素都可以結合表達式使用,包括:
-
Filters 過濾器
例子
簡單的訂書處理
<flow>
<file:inbound-endpoint path="/myDirectory">
<file:filename-filter name="*.xml"/>
</file:inbound-endpoint>
<xml:xslt-transformer xsl-file="bookOrderTransformation.xsl"/>
<splitter expression="xpath://order"/>
<!-- The following message processors will be invoked for each order in the xml file -->
<expression-filter expression="xpath://order[@type='book']"/>
<component class="org.my.BookOrderProcessor"/>
<smtp:outbound-endpoint subject="Order Confirmation" address=""/>
<jdbc:outbound-endpoint />
<default-exception-strategy>
<jms:outbound-endpoint queue="failedOrders"/>
</default-exception-strategy>
</flow>
流程圖的表現
當接收到消息或者消息源送來消息,流程圖就會開始運作並且按照配置的順序依次執行處理鏈中的消息處理器。某些消息處理器可以配置子消息處理器,這時便會先去執行完這些子消息處理器,再回到原flow繼續執行。
上述的情況是流程圖配置爲單向(one-way)模式時的表現。當傳入節點設置爲請求相應(request-response)模式時,流程圖也會相應的變成請求相應(request-response)模式。流程圖的調用者在發送消息後,會從傳入節點收到消息響應。若流程圖中沒有<response>塊且消息處理器沒有對響應進行任何處理的話,那麼流程圖就會把處理鏈中最後一個消息處理器的處理結果作爲流程圖的響應傳回給調用者。若有<response>塊存在你的流程圖中,則配置了該元素的消息處理器會處理響應消息。一些消息處理器例如CXF,默認的配置是處理響應消息。
注意:當流程圖中的最後一個元素配置爲單向傳出節點時,該元素的執行不會有返回,所以消息的負載會變成NullPayload(空負載)。如果單向元素後面跟着其他的處理器,則後續處理器會收到與前面的單向傳出節點所收到消息相同的的傳入消息,而不會收到NullPayload。
譯註:重點在單向節點後的任何消息處理器都會收到與單向節點所收到相同的傳入消息,NullPayload的情況並不會真的出現,請求相應模式下的flow,如果最後一個處理器是單相節點,flow設計器會自動跳過單相節點。而單相模式flow,本來就不需要響應返回。
image
私有流程圖
私有流程圖是無通過Mule節點從JVM外部訪問的,不能對其定義消息源。
私有流程圖只能通過相同Mule運行示例中的流程圖引用進行訪問。在Mule xml配置中,flow-ref元素用來引用流程圖。
私有流程圖與普通流程圖(公共流程圖)的差異在於,普通流程圖有自己的上下文和異常處理策略,而私有流程圖則沒有,私有流程圖使用引用它的流程圖的上下文和異常處理策略。
私有流程圖例子
<flow name="privateFlow">
<append-string-transformer message="b"/>
</flow>
<flow name="publicFlow">
<http:inbound-endpoint address="http://localhost:8080"/>
<append-string-transformer message="a"/>
<flow-ref name="privateFlow"/>
<append-string-transformer message="c"/>
</flow>
更多內容
閱讀下面的博文了解我們在Mule3中追加流程圖的原因
-
Mule3架構,第二部分:介紹消息處理器
作者:麥克斯杜
鏈接:https://www.jianshu.com/p/867d3fb2f48f