<flow name="Flow1">
<quartz:inbound-endpoint jobName="ReadQ1" cronExpression="* 30 15 * * ?">
<quartz:endpoint-polling-job>
<quartz:job-endpoint address="jms://Q1"/>
</quartz:endpoint-polling-job>
</quartz:inbound-endpoint>
<component>
<singleton-object class="MyComponenet"/>
</component>
<choice>
<when expression="payload==200" evaluator="groovy">
<flow-ref name="Flow2"/>
</when>
</choice>
</flow>
<flow name="Flow2">
<jms:inbound-endpoint queue="Q2"/>
<component class="AnotherComponent"/>
<jms:outbound-endpoint queue="Q3"/>
</flow>
我希望Flow1能够按照定义的石英计划(15:30)执行。 并且基于MyComponent的有效负载返回,我引用Flow2来执行。 但Flow2在触发Flow1之前执行。
如何实现流程以便始终从Flow1调用Flow2?
答案 0 :(得分:0)
如果在flow1中使用flow-ref,则将flow2设为子流。然后从flow2
中删除jms-inbound端点<sub-flow name="Flow2">
<component class="AnotherComponent"/>
<jms:outbound-endpoint queue="Q3"/>
</sub-flow>
如果你想使用flow-ref,还要用子流替换flow3。
另一个选择是用<jms:outbound-endpoint queue="Q2"/>
替换你的flow-ref调用,并保持你的flow2在你的例子中。
答案 1 :(得分:0)
实际上Flow2不是私有的。要将其设为私有,您必须删除入站端点。
如果不采用这种方法,流量将无法从flow-ref元素中调用。
据说你可以使用3种方法
答案 2 :(得分:0)
您可以将Flow2的初始状态声明为“已停止”:
这将阻止Flow2在Flow1之前运行(或者根本不运行)。
然后,您可以使用groovy脚本以编程方式启动它:
if (muleContext.registry.lookupFlowConstruct('Flow2').isStopped())
{
muleContext.registry.lookupFlowConstruct('Flow2').start()
}
启动它后,jms队列将开始轮询。
我希望这会有所帮助。