2014-09-13 49 views
0

我有一个ServiceFlow和一个FileFlow。一旦ServiceFlow(Flow1)被触发,FileFlow(Flow2)应该获取所有文件并处理它们。Mule ESB:无法控制从flow1流向flow 2

将Flow2中的初始状态设置为停止状态仅在Mule服务器启动之前第一次工作,即第一次触发执行。一旦流量达到第一个触发器,如果​​我试图保留一些文件在file:inbound-endpoint它开始处理文件。

但我的方案仅基于每个触发器,因此第二个文件必须选择该文件。请帮助我如何在Flow2中进行控制。

我使用下面的代码

<flow name="serviceFlow" doc:name="Flow1"> 
    <http:inbound-endpoint exchange-pattern="request-response" 
     host="localhost" port="8081" doc:name="HTTP" contentType="text/xml" 
     mimeType="text/xml" /> 
    <set-payload value="'Started Processing'" doc:name="Set Payload" /> 
    <async doc:name="Async"> 
     <expression-component doc:name="Expression"> 
      app.registry.FileFlow.start(); 
     </expression-component> 
    </async> 
</flow> 

<flow name="FileFlow" doc:name="Flow2" initialState="stopped" > 
    <file:inbound-endpoint responseTimeout="10000" doc:name="File" path="C:\Users\Desktop\IN"/> 
    <batch:execute name="businessBatch1" doc:name="Batch Execute"/> 
</flow> 

使用骡子版本:3.5.1

回答

2

我可以建议你是把一个<expression-component doc:name="Expression">app.registry.FileFlow.stop();</expression-component>在第二流的末尾,以便在第二次人流后被执行时,它会再次使其初始状态为“停止”,以便您可以无忧地再次触发第一个流程,因为flow2已停止。

<flow name="serviceFlow" doc:name="Flow1"> 
    <http:inbound-endpoint exchange-pattern="request-response" 
     host="localhost" port="8081" doc:name="HTTP" contentType="text/xml" 
     mimeType="text/xml" /> 
    <set-payload value="'Started Processing'" doc:name="Set Payload" /> 
    <async doc:name="Async"> 
    <expression-component doc:name="Expression"> 
     app.registry.FileFlow.start(); 
    </expression-component> 
    </async> 
</flow> 

<flow name="FileFlow" doc:name="Flow2" initialState="stopped" > 
    <file:inbound-endpoint responseTimeout="10000" doc:name="File" path="C:\Users\Desktop\IN"/> 
    <batch:execute name="businessBatch1" doc:name="Batch Execute"/> 
    <expression-component doc:name="Expression"> 
    app.registry.FileFlow.stop(); 
    </expression-component> 
</flow> 
+0

森:我已经尝试过,但它似乎并没有工作。我是做错了还是有其他方法。 – star 2014-09-13 21:48:52

+0

@Aniren:老板谢谢,它工作正常。但在其他一些场景中,比如我从我的Flow2调用批处理流,而在(输入阶段)的批处理流中,我得到的错误如** org.mule.transport.file.ReceiverFileInputStream **不是正确的类型。它必须是类型**接口java.lang.Iterable java.lang.Iterable“**它不工作。再次我做批处理输入阶段迭代(因为我inout我们xml,使用Java组件作为列表)它的工作原理为什么这个奇怪的场景 – star 2014-09-13 22:25:22

+0

你需要在Stack Overflow上创建一个单独的新问题,在那里发布你的Mule配置..我们可以研究它并讨论那个问题的解决方案:) – 2014-09-14 09:16:59