2016-01-29 50 views
1

我和WSO2 ESB 4.8.1WSO2迭代主叫端點,直到正確的響應

我的完整功能的工作是:

  1. 步驟一: 我作出這樣的迴應我的服務的呼叫用的ProcessID(Asynchcronous)

    的服務讓asociated到的ProcessID

  2. 第二步工作: 我要重複調用帶的ProcessID直到響應,指示我的服務,進程已經完成,並返回我結果

我遇到了兩個步驟實現問題。

+0

你能在這裏顯示一些代碼嗎? –

+0

你有什麼問題? – lakshman

+0

你好,我的主要問題是,我是新的工作與wso2,我現在不怎麼實現一個while循環調用和端點,直到endpoind響應包含具體值。提前致謝 –

回答

1

您可以將具有進程ID的響應存儲到消息存儲中。

你定義一個消息處理器(一個調度消息轉發處理器),其從該商店使用消息,並將它們發送到代理服務(同一ESB內定義)

在該代理服務:

  • 你打電話給你的服務進程號
  • 你分析它的響應在這個代理outSequence並決定返回它,如果它是好的(所以,消息處理器將執行reply.sequence並從商店刪除消息)或返回如果不是,則會出錯(消息處理器將執行可愛的fault.sequence,讓消息在商店所以,它會在下次重試)
1

非常感謝你我會嘗試你的解決方案。

我已經做了一些改進,檢查processId是否完成,如果不是secuence自己調用它(遞歸),我測試這個替代方案,我把代碼(一些認爲是硬編碼,但重要是這個想法)

<resource methods="GET" uri-template="/test2"> 
     <inSequence> 
     <log> 
      <property name="***** IN" value="Estoy en el GET /recursivetest1/test2"></property> 
      </log> 
     <call> 
      <endpoint name="uploadServlet"> 
       <!-- this is the request that return the processId --> 
       <http method="get" uri-template="http://localhost:1234/ProyectoWebMultipartForm/UploadServlet?fase=escaneo"></http> 
      </endpoint> 
     </call> 
     <log> 
      <property name="data_id" expression="json-eval($.data_id)"></property> 
     </log> 
     <property name="escaneo" expression="json-eval($.data_id)"></property> 
     <sequence key="iterate_calls2"></sequence> 
     <send></send> 
     </inSequence> 
     <outSequence> 

     </outSequence> 
    </resource> 
</api> 


///////////////// 

<sequence xmlns="http://ws.apache.org/ns/synapse" name="iterate_calls2" trace="disable"> 

    <call> 
     <!-- this is the request that check if the processId has finished--> 
     <endpoint name="uploadServlet"> 
     <http method="get" uri-template="http://localhost:1234/ProyectoWebMultipartForm/UploadServlet?fase=chequeo"></http> 
     </endpoint> 
    </call> 

    <property xmlns:ns="http://org.apache.synapse/xsd" name="resultado" expression="json-eval($.scan_results.scan_all_result_a)"></property> 
    <filter xmlns:ns="http://org.apache.synapse/xsd" source="get-property('resultado')" regex="Clean"> 
     <then> 
     <log level="full"> 
      <property name="MESSAGE" value="No hay virus"></property> 
     </log> 
     </then> 
     <else> 

     <property name="mensaje" expression="json-eval($.mensaje)"></property> 
     <filter source="get-property('mensaje')" regex="Escaneo sin finalizar"> 
      <then> 
       <!-- the processId has not finished, I call again to the sequence, recursion--> 
       <log level="full"> 
        <property name="MESSAGE" value="El escaneo no ha finalizado antes del sleep"></property> 
       </log> 
       <script language="js"> 
        <![CDATA[java.lang.Thread.sleep(200);]]></script> 
        <log level="full"> 
        <property name="MESSAGE" value="El escaneo no ha finalizado despues del sleep"></property> 
        </log> 
        <sequence key="iterate_calls2"></sequence> 
       </then> 
       <else> 
        <!-- the processId has finished, I have end--> 
        <log level="full"> 
        <property name="MESSAGE" value="No hay virus"></property> 
        </log> 
       </else> 
      </filter> 
     </else> 
     </filter> 
    </sequence>