2014-02-24 140 views
0

我實際上通過端口8081上的http請求調用exeexpression-componentexe在端口8082上發送http請求,並且能夠記錄輸出。 最後我不得不回覆流的輸出發送回主流,但我不知道如何...Mule異步請求 - 回覆

這裏是我的代碼:

<flow name="mainFlow" doc:name="mainFlow"> 
    <http:inbound-endpoint exchange-pattern="request-response" address="http://localhost:8081" doc:name="HTTP" /> 
    <request-reply timeout="10000"> 
     <vm:outbound-endpoint path="request" exchange-pattern="one-way"/> 
     <vm:inbound-endpoint path="reply" exchange-pattern="one-way"/> 
    </request-reply> 
</flow> 

<flow name="request" doc:name="request"> 
    <vm:inbound-endpoint path="request" doc:name="VM" /> 
    <expression-component doc:name="Expression">Runtime.getRuntime().exec("C:\\myfile.exe arg1");</expression-component> 
</flow> 

<flow name="reply" doc:name="reply"> 
    <http:inbound-endpoint address="http://localhost:8082" doc:name="HTTP" exchange-pattern="one-way" /> 
    <logger message="#[message.inboundProperties['test']]" level="INFO" doc:name="Logger"/> 
    <vm:outbound-endpoint path="reply" doc:name="VM" exchange-pattern="one-way"/> 
</flow> 

回答

1

你必須確保你通過exeMULE_CORRELATION_ID消息屬性攜帶到http://localhost:8082,否則request-reply消息處理器無法將異步回覆與當前請求相關聯。

例如,通過關聯ID具有第二個參數exe

<expression-component doc:name="Expression"> 
    Runtime.getRuntime().exec("C:\\myfile.exe arg1 " + message.correlationId); 
</expression-component> 

並確保exe傳播在名爲X-MULE_CORRELATION_ID HTTP頭朝向http://localhost:8082關聯ID。

+2

我想你還必須從請求出站中刪除MULE_REPLYTO屬性:

+0

好點。是的,可能取決於表達式組件如何影響對機制的回覆。 –

+0

謝謝!它的作品:) – Daniel