Seleccionar página

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.

Apache Karaf

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.

Apache Camel

Apache ActiveMQ

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 !

Pin It on Pinterest