Fusible JBoss - Conceptos de camello
En este capítulo, entenderemos los diferentes conceptos de Camel. Comencemos por tomar un ejemplo básico para comprender los conceptos básicos.
CamelContext
Cada aplicación de camello tendrá al menos un CamelContext. Este es el lugar donde agregamos rutas en camello. Esto es similar aApplicationContext de primavera.
El contexto del camello puede pensarse como un contenedor que mantiene todas las cosas juntas. Un contexto de camello puede tener múltiples rutas dentro de él.
Rutas
CamelContext puede contener una o más rutas. Las rutas son la lógica de integración que define cómo fluirán los datos en el contexto de camello de un punto final a otro.
Punto final
El punto final es el final del canal a través del cual el sistema puede enviar o recibir mensajes. Esto es lo que llamamos destino o origen en el lenguaje de la comunicación.
Componentes
Los componentes son punto de extensión en Camel. Los componentes pueden ser una interfaz para la tecnología, el formato de datos, los transformadores, etc. También pueden actuar como una fábrica de puntos finales.
EIP
EIP son las siglas de Enterprise Integration Pattern. Estas son soluciones identificadas y bien conocidas para un problema recurrente. Camel admite la mayoría de los patrones de integración empresarial.
Enrutador basado en contenido
Los patrones CBR nos permiten enrutar datos según el contenido del archivo de entrada.
Este patrón se usa cuando tenemos que enrutar valores en función del contenido del cuerpo de entrada.
El siguiente ejemplo leerá datos de D:/data/inputdirectorio. Después de leer, verificará la etiqueta de valor dentro de la etiqueta de datos. Si la etiqueta de valor contienevalue1, será enviado a D:/value1, Si contiene value2, será enviado a D:/value2 y si ninguno de estos dos, se enviará a otros.
<CamelContext xmlns = "http://camel.apache.org/schema/spring">
<route>
<from uri = "file:///D:/data/input"/>
<choice>
<when>
<xpath>/data/value = 'value1'</xpath>
<to uri = "file:///D:/value1"/>
</when>
<when>
<xpath>/data/value = 'value2'</xpath>
<to uri = "file:///D:/value2"/>
</when>
<otherwise>
<to uri = "file:///D:/others "/>
</otherwise>
</choice>
</route>
</camelContext>
Input
D: /data/input/message1.xml
<data>
<value>value1</value>
</data>
D: /data/input/message2.xml
<data>
<value>value2</value>
</data>
Output
D: / valor1 /
<data>
<value>value1</value>
</data>
D: / valor2 /
<data>
<value>value2</value>
</data>
Disidente
Se utiliza un patrón de división para dividir los datos de entrada en trozos más pequeños.
Este patrón se usa la mayoría de las veces con una gran cantidad de datos que deben dividirse en trozos, por lo que se puede procesar. Divide la entrada en fragmentos más pequeños según la cadena del token de entrada.
<CamelContext xmlns = "http://camel.apache.org/schema/spring">
<route>
<from uri = "file:///D:/inbox"/>
<split streaming = "true">
<tokenize token = "order" xml = "true"/>
<to uri = "activemq:queue:order"/>
</split>
</route>
</CamelContext>
Input
D: /inbox/message.xml
<order>
<data>
<value>value1</value>
</data>
</order>
<order>
<data>
<value>value2</value>
</data>
</order>
<order>
<data>
<value>value3</value>
</data>
</order>
Output
Si marca AMQ, encontrará 3 mensajes publicados.
<order>
<data>
<value>value4</value>
</data>
</order>
Lista de recipientes
Se utiliza un patrón de lista de destinatarios cuando es necesario recuperar una lista de destinatarios del propio cuerpo del mensaje.
En el siguiente ejemplo, se enviará un mensaje a todos los destinatarios que aparecen en la etiqueta de cliente como una lista de cadenas separada por comas.
<CamelContext xmlns = "http://camel.apache.org/schema/spring">
<route>
<from uri = "jms:xmlOrders" />
<recipientList>
<xpath>/order/customer</xpath>
</recipientList>
</route>
</camelContext>
Otros EIP
Camel brinda apoyo a casi todos los EIP identificados. Algunos de los EIP de uso común se mencionan a continuación.
Log - Para registrar el mensaje completo o parte de él
Message Filter - Filtrado de contenidos de mensajes
Re-Sequencer - Obtener todos los tokens en secuencia.
Wiretap - Inspeccionar mensajes de viaje.
La lista completa de EIP y su uso se puede encontrar en la documentación oficial de Camel http://camel.apache.org/eip.html
Manejo de excepciones en Camel
Using Error Handler - Esta es la forma más sencilla de gestionar las excepciones en camello.
Para usar esto, tenemos que configurar el bean de clase del manejador de errores y proporcionarlo como referencia a CamelContext errorHandlerRef atributo.
<bean id = "loggingErrorHandler" class = "org.apache.camel.builder.LoggingErrorHandler">
<property name = "logName" value = "mylogger.name"/>
<property name = "level" value = "DEBUG"/>
</bean>
<camelContext errorHandlerRef = ” loggingErrorHandler” >
…
</camelContext>
Uso de Try Catch finalmente
Camel también es compatible con el estilo Java Try Catch Finally block para el manejo de errores.
Al igual que Java, tiene los siguientes tres bloques:
doTry El bloque contiene código que puede generar una excepción.
doCatch El bloque contiene código que debe ejecutarse en caso de excepción.
doFinallyEl bloque tiene código que debe ejecutarse independientemente de la excepción. Siempre se ejecutará sin importar si se generó una excepción o no.
Note- Mock es un componente de prueba y no se recomienda para otros fines. Es el componente de camel que se utiliza para realizar pruebas al igual que el componente jMOck en el desarrollo basado en pruebas.
<route>
<from uri = "direct:start"/>
<doTry>
<process ref = "someProcesorThatmayFail"/>
<to uri = "mock:result"/>
<doCatch>
<exception>java.io.IOException</exception>
<exception>java.lang.IllegalStateException</exception>
<to uri = "mock:catch"/>
</doCatch>
<doFinally>
<to uri = "mock:finally"/>
</doFinally>
</doTry>
</route>
En el ejemplo anterior, podemos dar una lista de excepciones que deben ser manejadas por el bloque catch.
Implementación de paquete en Fuse
Inicie Fuse usando Fuse.bat/start.bat.
Si inicia Fuse usando start.bat, use client.bat para conectarse a Fuse. Debería obtener la interfaz de usuario como se muestra en la siguiente captura de pantalla.
Esta es la CLI para acceder a los comandos Karaf y Fuse.
install –s mvn:group.id /artifact.id/version
e.g. install –s mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT