- ¿Qué es Enterprise Integration Patterns?

- ¿Cómo implementar estos patrones?
Actualmente
estos patrones son implementados mediante muchos códigos libre ESB´s. Por
ejemplo:
·
Spring Integration
·
Apache Camenl
·
Mule ESB
·
Guaraná DSL
A
continuación impartiremos algunos consejos para poder implementar 1 patrón de
integración utilizando en este caso Apache Camel.
- Implementando los patrones Splitter y Aggregator con Apache Camel:
A.- Patrón Splitter
Recordemos
que el patrón Splitter nos permite dividir un mensaje en pedazos y procesarlas
individualmente. Es necesario especificar
un Splitter como split(). En versiones antiguas de Camel, se usará splitter().
Ejemplo:
Los
siguientes Ejemplos muestran como tomar un request del queue:a endpoint dividirlo
usando una Expresión, y luego avanzar hacia cada pedazo queue:b.
RouteBuilder builder = new RouteBuilder() { public void configure() { errorHandler(deadLetterChannel("mock:error")); from("direct:a") .split(body(String.class).tokenize("\n")) .to("direct:b"); } }; |
Podemos
usar cualquier lenguaje soportado como: XPath, XQuery, etc.
from("activemq:my.queue").split(xpath("//foo/bar")).convertBodyTo(String.class).to(" file://some/directory" ) |
Usando Extensiones Spring XML
<route> <from uri="direct:a"/> <split> <xpath>/invoice/lineItems</xpath> <to uri="direct:b"/> </split> </route> </camelContext> |
Dividiendo un Conjunto,
Iteración o Arreglo
Un
caso común es dividir un conjunto, iteración o arreglo de mensajes. En el
ejemplo siguiente usaremos una Expresión para identificar el valor del split.
from("direct:splitUsingBody").split(body()).to("mock:result"); from("direct:splitUsingHeader").split(header("foo")).to("mock:result"); |
En
Spring XML puedes usar el lenguaje Simple para identificar el valor de un split.
<split> <simple>${body}</simple> <to uri="mock:result"/> </split> <split> <simple>${header.foo}</simple> <to uri="mock:result"/> </split> |
Usando Extensiones Spring XML
Podemos usar
expresiones en el DSL Spring para divider los cuerpos o cabeceras y tomarlos
con un identificador. A continuación un tag identificador utilizado comúnmente.
<route> <from uri="direct:start"/> <split> <tokenize token="@"/> <to uri="mock:result"/> </split> </route> </camelContext> |
¿Qué devuelve el Camel?
·
Camel 2.2 or older: El Splitter retornará por defecto el último mensaje
dividido.
·
Camel 2.3 and newer: El Splitter por
defecto devolverá el mensaje original.
·
Todas las versiones: Podemos sobreescribir esto,
reemplazando nuestra propia estrategia con AggregationStrategy.
Ejecución paralela de
diferentes partes
Si
deseas ejecutar todas las partes en paralelo puedes usar una notación especial
de split() con 2 argumentos, donde el segundo es un flag boolean.
XPathBuilder xPathBuilder = new XPathBuilder("//foo/bar");
from("activemq:my.queue").split(xPathBuilder,
true).to("activemq:my.parts"); |
Referencias:
No hay comentarios:
Publicar un comentario