Es decir con una sola petición de entrada podremos enviar varias peticiones (a diferentes endpoints y con differente formato de petición), recopilar todas las respuestas, procesarlas(aplicar transformaciones) y devolver un solo mensaje.
En el siguiente ejemplo crearé un servicio proxy que invocara en paralelo las operaciones "echoInt" y "echoString" del servicio "echo" que viene con el ESB, recogerá las respuestas y devolverá un un mensaje con el resultado de las mismas.
El servicio proxy:
<proxy name="scatter-gather-proxy" ...> <target inSequence="scatter-gather-sequence-in" outSequence="scatter-gather-sequence-out"/> </proxy>
La secuencia de entrada (inSequence) usando "Clone mediator":
<sequence name="scatter-gather-sequence-in" ...> <log level="custom"> <property name="MSG" value="SEQUENCIA ENTRADA"/> </log> <clone id="echoClone"> <target sequence="scatter-gather-echoInt-sequence-in"/> <target sequence="scatter-gather-echoString-sequence-in"/> </clone> </sequence>
La secuencia de entrada para invocar echoInt:
<sequence name="scatter-gather-echoInt-sequence-in" ...> <log level="custom"> <property name="secuencia" value="scatter-gather-echoInt-sequence-in entrada"/> </log> <property description="SOAPAction" name="SOAPAction" scope="transport" type="STRING" value="urn:echoInt"/> <payloadFactory description="echoInt" media-type="xml"> <format> <echo:echoInt xmlns:echo="http://echo.services.core.carbon.wso2.org"> <in xmlns="">$1</in> </echo:echoInt> </format> <args> <arg evaluator="xml" expression="//echoData/number"/> </args> </payloadFactory> <log level="custom"> <property name="secuencia" value="scatter-gather-echoInt-sequence-in salida"/> </log> <send> <endpoint key="echo-endpoint"/> </send> </sequence>
La secuencia de entrada para invocar echoString:
<sequence name="scatter-gather-echoString-sequence-in" ...> <log level="custom"> <property name="secuencia" value="scatter-gather-echoString-sequence-in entrada"/> </log> <property description="SOAPAction" name="SOAPAction" scope="transport" type="STRING" value="urn:echoString"/> <payloadFactory description="echoString" media-type="xml"> <format> <echo:echoString xmlns:echo="http://echo.services.core.carbon.wso2.org"> <in xmlns="">$1</in> </echo:echoString> </format> <args> <arg evaluator="xml" expression="//echoData/text"/> </args> </payloadFactory> <log level="custom"> <property name="secuencia" value="scatter-gather-echoString-sequence-in salida"/> </log> <send> <endpoint key="echo-endpoint"/> </send> </sequence>
La secuencia de entrada (outSequence) usando "Aggregate mediator":
<sequence name="scatter-gather-sequence-out" ...> <log level="custom"> <property name="msg" value="SEQUENCIA SALIDA"/> </log> <aggregate id="echoClone"> <completeCondition> <messageCount max="2" min="2"/> </completeCondition> <onComplete expression="//soapenv:Body/*[1]" xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"> <log level="full"> <property name="ON-COMPLETE" value="EJECUTANDO AGREGATOR"/> </log> <payloadFactory description="make response" media-type="xml"> <format> <aggregateResult xmlns=""> <returnInt>$1</returnInt> <returnString>$2</returnString> </aggregateResult> </format> <args> <arg evaluator="xml" expression="//ns:echoIntResponse/return" xmlns:ns="http://echo.services.core.carbon.wso2.org"/> <arg evaluator="xml" expression="//ns:echoStringResponse/return" xmlns:ns="http://echo.services.core.carbon.wso2.org"/> </args> </payloadFactory> <send/> </onComplete> </aggregate> </sequence>
Enlaces relacionados:
- FIN -
No comments:
Post a Comment