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