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

相关文章
相关标签/搜索