2014-09-13 12 views
0

ServiceFlow와 FileFlow가 있습니다. ServiceFlow (Flow1)가 트리거 되 자마자 FileFlow (Flow2)는 모든 파일을 가져 와서 처리해야합니다.ESB : flow1에서 flow2 로의 플로우를 제어 할 수 없습니다.

초기 상태를 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

Sen : 나는 이것을 시도했지만 작동하지 않는 것 같습니다. 내가 잘못하고 있거나 다른 방법으로 거기에있다. – star

+0

@Aniren : Boss 고맙습니다, 괜찮습니다.하지만 다른 시나리오에서는 (배치 단계에서 일괄 처리 흐름에있는 반면에 Flow2에서 일괄 처리 흐름을 호출하는 예를 들어 ** 같은 오류가 발생합니다 ** org.mule.transport.file.ReceiverFileInputStream ** 올바른 유형이 아닙니다. 그것은 ** 유형 java.lang.Iterable java.lang.Iterable java.lang.Iterable합니다 "** 작동하지 않습니다. 다시 한 번 일괄 입력 단계를 iteratable (내 inout us xml, 목록으로 만드는 자바 구성 요소를 사용하여) 왜 이상한 시나리오가 생깁니 까? – star

+0

거기에 뮬 구성을 게시하는 스택 오버플로에 대한 별도의 새로운 질문을 만들어야합니다. 우리는이 문제를 조사하고 해결책을 논의 할 수 있습니다 :) –