我正在使用wso2 ESB 4.8.1
我的完整功能是:
第一步: 我打电话给一个用processId(Asynchcronous)回复我的服务
该服务使工作与该processId
第二步: 我必须迭代使用processId调用服务直到一个响应表明我已完成该过程并返回结果
我遇到第二步实施的问题。
答案 0 :(得分:1)
您可以将带有进程ID的响应存储到消息存储库中。
定义消息处理器(预定消息转发处理器),它使用来自此存储的消息并将它们发送到代理服务(在同一ESB中定义)
在此代理服务中:
答案 1 :(得分:1)
非常感谢你,我会尝试你的解决方案。
我已经用一个secuence取得了一些进展,检查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>