我保留一个流程,将'流程A'作为初始状态停在“停止”状态。然后在另一个流程中使用groovy脚本或MEL表达式来说'流程B';我开始了同样的'流程A'。在'流程A'结束时,我以编程方式停止流程。现在,如果我再次通过“流程B”启动'流程A',它将失败,说'流程A'已经启动;无法重新启动。以编程方式启动/停止骡子流程
任何解决方案。
我想随时启动自己的流程,保持初始状态为停止&再次停止使用脚本流程。
下面是代码:
<flow name="FlowB">
<poll doc:name="Poll">
<logger level="INFO" doc:name="Logger"/>
</poll>
<logger level="INFO" doc:name="Logger" message="triggered"/>
<scripting:component doc:name="Groovy">
<scripting:script engine="Groovy"><![CDATA[muleContext.registry.lookupFlowConstruct('FlowB').start()]]></scripting:script>
</scripting:component>
<logger level="INFO" doc:name="Logger"/>
<expression-component doc:name="Expression"><![CDATA[app.registry.FlowA.stop();]]></expression-component>
</flow>
<flow name="FlowA" initialState="stopped">
<sqs:receive-messages config-ref="Amazon_SQS__Configuration" doc:name="Amazon SQS (Streaming)"/>
<logger level="INFO" doc:name="Logger"/>
</flow>
我使用轮询这么开始流A.,如果我再次运行流程B开始流通A;它抛出一个例外。
我认为你是对的。返回stop()后,流程不能再次启动,因为它们异步工作。请看看我的代码。 –
您可以在停止后再次启动流程...但您必须等待,直到将状态从开始状态切换为停止状态完成。这个时间问题的一个可能的解决方案可能是Anirbans isStarted-check和增加轮询频率的组合。 – Yevgeniy