我正在为我的一个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>
请指导我。
答案 0 :(得分:4)
子流的作用类似于宏:执行方式,就好像子流的元素被复制在调用流中一样。
因此,调用流的线程行为将决定子流的线程行为。
无论它们是在子流程还是主流程中使用,如果使用它们的单例实例(常见用例),都应该将组件类编写为线程安全的。如果您使用原型实例(每个请求创建一个实例)或池化实例(有限数量的实例,线程瓶颈),则组件类可能是线程不安全的。
根据经验,尽可能多地争取线程安全的无状态组件类,以便为您节省潜在的优化痛苦。