Mule ESB中引用自定義Component使用單例方式

在使用Mule ESB定義流程時,有時會使用自定義的Java Component,例如:spring

<flow name="testFlow">
        <xx:inbound-endpoint doc name="xxx" />
        <component class="xxx.xxx" doc:name="Java Component">
        </component>
</flow>

默認狀況下Mule引用自定義Component時,是request方式,即從inbound endpoint每推送一個Mule Message到Component節點時,建立一個Component instance去處理這條Message,處理完後instance被銷燬。code

正常狀況下,request方式能夠知足通常要求,可是若是Component中存在用於統計數據(例如處理時間,處理條數)等的屬性時,每次新建一個instance都會重置這些屬性,致使全部Mule Message處理完後沒法統計這些數據。component

針對這個問題,咱們有如下兩種解決方法:xml

1)將這些統計數據的屬性設置爲static。class

2)將Java Component實例引用方式改成singleton方式。test

第二種方法有兩種設置方式:object

  • 直接在Mule流程文件中,設置引用的Java Component爲singleton object

     

<flow name="testFlow">
        <xx:inbound-endpoint doc name="xxx" />
        <component doc:name="Java Component">
              <singleton-object class="xxx.xxx"/>
        </component>
</flow>
  •   設置引用的Java Component爲spring singleton object

 

<spring:beans>
    <spring:bean id="xxId" name="xxName" class="xxx.xxx" scope="singleton" />    	    		
</spring:beans>

<flow name="testFlow">
    <xx:inbound-endpoint doc name="xxx" />
    <component doc:name="Java Component">
        <spring-object bean="xxName"/>
    </component>
</flow>

用這兩種方式設置的singleton訪問均可以保證數據正常被統計,固然,在統計完成後須要將這些屬性歸零。request

相關文章
相關標籤/搜索