具有重用和并发的子流

时间:2013-01-18 16:57:27

标签: concurrency mule reusability flow

我正在为我的一个uscases准备一个解决方案。 我的解决方案可能是抽象的。

我的问题是,当两个主要流程正在同时调用相同的子流时, 它会没有任何问题吗?

我还需要将代码编写为所有正在使用的类的线程安全 子流程中的自定义组件/ trnasformer?

我的抽象配置如下所示。

<flow name="mainflow_1" >
    <inbound-endpoint/>
    <transformer ....>
    <component ....>
        <flow-ref name="subflow_1"></flow-ref>
    <transformer ....>
    <component  ...>
    <outbound-endpoint ....>
</flow>

<flow name="mainflow_2" >
    <inbound-endpoint  type="request-response" />
    <transformer ....>
    <component ....>
        <flow-ref name="subflow_1"></flow-ref>
    <transformer ....>
    <component  ...>            
</flow>

<sub-flow name="subflow_1" >        
    <transformer ....>
    <component ....>
        <outbound-endpoint  call to some service >
    <transformer ....>
    <component  ...>        
</sub-flow>

请指导我。

1 个答案:

答案 0 :(得分:4)

子流的作用类似于宏:执行方式,就好像子流的元素被复制在调用流中一样。

因此,调用流的线程行为将决定子流的线程行为。

无论它们是在子流程还是主流程中使用,如果使用它们的单例实例(常见用例),都应该将组件类编写为线程安全的。如果您使用原型实例(每个请求创建一个实例)或池化实例(有限数量的实例,线程瓶颈),则组件类可能是线程不安全的。

根据经验,尽可能多地争取线程安全的无状态组件类,以便为您节省潜在的优化痛苦。