Paquetizar Apache Camel y ActiveMQ Artemis en Apache Karaf.
El proyecto Apache ServiceMix ha quedado discontinuado (la última versión es la 7.0.1) por lo que la Fundación Apache ya no paquetiza este motor ESB con Apache Karaf, Apache ActiveMQ y Apache Camel para construir arquitecturas de integración basado en bus de servicios empresariales (Enterprise Service Bus). Este motor utiliza Apache Karaf (un contenedor ligero basado en la tecnología OSGI) al igual que las soluciones de integración de Talend y JBoss Fuse de RedHat.
Sin embargo, podemos realizar directamente la encapsulación de Apache Camel y ActiveMQ en Apache Karaf y disponer de un motor actualizado a las últimas versiones.
Dado que la documentación es algo confusa para integrar ActiveMQ (Classic o Artemis), dejamos una explicación de cómo activar Apache Camel y ActiveMQ Artemis (la versión moderna) en Apache Karaf. El ejemplo se ha realizado con CentOS 7, OpenJDK 11 y Apache Karaf 4.3.1.
Si lo prefieres, puedes utilizar una de nuestras máquinas AMI disponibles en Amazon AWS aquí y aunque no son exactamente las mismas versiones, no creo que haya problemas …
Una vez instalado y arrancado Apache Karaf, entrar en modo cliente a la consola de Karaf en $KARAF_HOME/bin ya que vamos a lanzar directivas desde la consola de Apache Karaf :
[root@localhost bin]# ./client Logging in as karaf __ __ ____ / //_/____ __________ _/ __/ / ,< / __ `/ ___/ __ `/ /_ / /| |/ /_/ / / / /_/ / __/ /_/ |_|\__,_/_/ \__,_/_/ Apache Karaf (4.3.1) Hit '<tab>' for a list of available commands and '[cmd] --help' for help on a specific command. Hit 'system:shutdown' to shutdown Karaf. Hit '<ctrl-d>' or type 'logout' to disconnect shell from current session. karaf@root()>
Instalar Artemis en Apache Karaf
a) Registramos el repositorio de features de Artemis:
karaf@root()> feature:repo-add artemis Adding feature url mvn:org.apache.activemq/artemis-features/RELEASE/xml/feature
b) Instalamos y arrancamos el broker de Artemis:
karaf@root()> feature:install artemis
El broker está configurado en ${KARAF_BASE}/etc/org.apache.activemq.artemis.cfg
c) Creamos el fichero $KARAF_HOME/etc/org.ops4j.connectionfactory-artemis.cfg con el siguiente contenido :
# org.ops4j.connectionfactory-artemis name = artemis #osgi.jndi.service.name = jms/artemis password = karaf #pool = transx type = artemis #type = activemq url = tcp://localhost:61616 user = karaf
Automáticamente, el servidor detecta el fichero e instancia la factoría de conexiones JMS.
d) Instalamos las siguientes features de Karaf para soportar JMS:
karaf@root()> feature:install pax-jms-pool pax-jms-artemis pax-jms-config jms
e) A continuación, indicamos una serie de comandos de las factoría de conexiones JMS.
Para consultar las factorías de conexiones :
karaf@root()> service:list javax.jms.ConnectionFactory [javax.jms.ConnectionFactory] ----------------------------- felix.fileinstall.filename = file:/usr/java/apache-karaf-4.3.1/etc/org.ops4j.connectionfactory-artemis.cfg name = artemis osgi.jndi.service.name = artemis password = karaf pax.jms.managed = true service.bundleid = 241 service.factoryPid = org.ops4j.connectionfactory service.id = 348 service.pid = org.ops4j.connectionfactory.c00a7787-209c-4d16-9dc5-87f4aa7b53dd service.scope = singleton type = artemis url = tcp://localhost:61616 user = karaf Provided by : OPS4J Pax JMS Config (241) Used by: Bundle 259
Acceder al listado de factorías de conexiones JMS :
karaf@root()> jms:connectionfactories JMS Connection Factory ────────────────────── artemis
Ver si el servicio de la factoría de conexiones está activo :
karaf@root()> jms:info -u karaf -p karaf artemis Property │ Value ─────────┼───────── product │ ActiveMQ version │ 2.17.0
Comprobar las colas de la factoría de conexiones :
karaf@root()> jms:queues -u karaf -p karaf artemis JMS Queues ──────────────────────────────────── 4895ba83-336a-4ad0-a704-658f5a651657 DLQ ExpiryQueue incomingOrders
Ver los mensajes de una cola :
karaf@root()> jms:browse -u karaf -p karaf artemis incomingQueues Message ID │ Content │ Charset │ Type │ Correlation ID │ Delivery Mode │ Destination │ Expiration │ Priority │ Redelivered │ ReplyTo │ Timestamp ───────────┼─────────┼─────────┼──────┼────────────────┼───────────────┼─────────────┼────────────┼──────────┼─────────────┼─────────┼─────────
Instalar Apache Camel en Apache Karaf
a) Agregamos el repositorio de Apache Camel :
karaf@root()> feature:repo-add camel Adding feature url mvn:org.apache.camel.karaf/apache-camel/RELEASE/xml/features
b) A continuación, instalamos Apache Camel y algunos componentes del mismo :
karaf@root()> feature:install camel
Instalar el proyecto
Utilizaremos el proyecto camel-jms disponible en los ejemplos del quickstart de JBoss Fuse disponible aquí.
a) El proyecto requiere de los siguientes componentes de Apache Camel :
karaf@root()> feature:install camel-blueprint camel-jms
b) Descargamos el fichero blueprint del proyecto aquí y lo copiamos con el nombre blueprint quickstart-camel-jms.xml en el directorio $KARAF_HOME/deploy
Automáticamente se activarán las rutas Camel del proyecto y se generan los directorios work/jms/input, work/jms/output/us, work/jms/output/fr y work/jms/output/others.
Confirmamos que el proyecto está funcionando:
karaf@root()> camel:context-list Context Status Total # Failed # Inflight # Uptime ------- ------ ------- -------- ---------- ------ jms-example-context Started 0 0 0 21m40s
Si ahora copiamos los ficheros de datos order*.xml disponibles aquí en work/jms/input, veremos como se procesan, se insertan en la cola de mensajes, se vuelve a leer estos mensajes para copiar el contenido en un fichero dentro de las rutas work/jms/output.
Si queremos ver los logs, podemos ver el fichero de logs $KARAF_HOME/data/logs/karaf.log o desde la línea de la consola cliente:
karaf@root()> log:display
Para ver las estadísticas de los intercambios de mensajes de las rutas :
karaf@root()> camel:route-list Context Route Status Total # Failed # Inflight # Uptime ------- ----- ------ ------- -------- ---------- ------ jms-example-context file-to-jms-route Started 0 0 0 24m16s jms-example-context jms-cbr-route Started 0 0 0 24m16s
¡Buen trabajo!
Con ésto, ya tenemos nuestro motor ESB con las últimas versiones actualizadas de los proyectos de la Fundación Apache y ya podemos realizar nuestras integraciones bajo una arquitectura de bus de servicios empresariales.
Si te ha parecido interesante este post sobre cómo Paquetizar Apache Camel y ActiveMQ Artemis en Apache Karaf y disponer de un motor actualizado a las últimas versiones, compártelo en redes sociales.
Y recuerda que si necesitas realizar integraciones entre sistemas externos, puedes contactar con nosotros ya que no se nos da nada mal.
Fuentes consultadas:
¡ Saludos !
0 comentarios