May 09

He leído “ActiveMQ in Action”

ActiveMQ in actionHe leído ActiveMQ in Action, una forma de enterarse de qué va ActiveMQ. El libro en sí no me ha gustado demasiado, se hace pesado de leer. Explica un concepto (eso sí es útil), te dice que el ejemplo de código de ese concepto está en tal sitio web, que para ejecutarlo uses tal comando y luego te planta dos páginas de libro viendo el log de salida del programa. Así una y otra vez.

Sin embargo, como yo soy más de enterarme bien de los conceptos que de andar mirando el detalle del código, el libro me ha servido para saber de qué va ActiveMQ y sus posibilidades.

ActiveMQ ofrece un servicio de mensajería entre distintas aplicaciones, o incluso para distintas partes dentro de una misma aplicación. Una aplicación o una parte de ella puede enviar mensajes a ActiveMQ y otra aplicación u otra parte de la misma pueden recoger esos mensajes. Aparte de esto, las características que mas me han llamado la atención de ActiveMQ son las siguientes:

Los mensajes pueden ser persistentes, es decir, se guardan automáticamente en ficheros o base de datos, según configuremos, de forma que si paramos la aplicación ActiveMQ y la volvemos a arrancar más adelante, los mensajes no entregados cuando paramos la aplicación, se recuperan y se pueden entregar en cuanto alguien los recoja.

Tiene posibilidad de arrancar varios ActiveMQ para trabajar colaborando, bien en forma de cluster, bien en configuración maestro-esclavos. En la configuración de cluster, los ActiveMQ se interconectan entre sí, de forma que si entregamos un mensaje en uno de ellos, se puede recoger en cualquiera de los otros. La configuración de cluster es muy sencilla, tiene posibilidad de "autodescubrimiento" de forma que según se vayan arrancando aplicaciones ActiveMQ en la red local se incorporan automáticamente al clustter, o bien podemos indicar las IPs concretas donde está cada ActiveMQ, para formar un cluster fijo. En cuanto a la configuración maestro-esclavo, es también sencilla. Un ActiveMQ es el que hace de maestro y es al que se conectan las aplicaciones. Los esclavos únicamente van guardando réplicas de los mensajes. Si el maestro se cae, uno de los esclavos entra en funcionamiento y las aplicaciones deben re-conectarse al nuevo maestro. Las librerías para clientes de ActiveMQ se pueden configurar de forma que hagan esta reconexión automáticamente.

Y lo que más me ha gustado, embeber un ActiveMQ dentro de nuestra propia aplicación es casi inmediato. Si ponemos la dependencia del jar adecuado (activemq-broker y activemq-client), basta con que nuestra aplicación establezca una conexión contra ActiveMQ usando el protocolo "vm://un-nombre" y automáticamente se creará una instancia de ActiveMQ con nombre "un-nombre" dentro de nuestra aplicación, disponible para cualquier parte de ella. Si además, a esa instancia le creamos una conexión adicional  "tcp:….", otros programas externos podrán conectarse a nosotros para recibir nuestros mensajes o enviarnos los suyos propios. También podemos crearle conexiones de red adicionales, de forma que nuestra instancia embebida de ActiveMQ forme parte de un cluster externo de ActiveMQ.

En resumen, me ha gustado la herramienta, es bastante simple de poner en marcha, de montar clusters e incluso de embeberla en nuestras aplicaciones. No me ha gustado que el envío de mensajes es relativamente tedioso: hay que crear la conexión, de la conexión una sesión, de la sesión un destino que no es más que un nombre, del destino crear una cola o un topic (son dos posibles formas de distribución del mensaje), un producer (el que envía el mensaje), construir el mensaje y enviarlo. Muchos de estos pasos se pueden dejar preparados para no repetirlos muchas veces, pero no deja de ser "un pelín" engorroso. Con la recepción algo similar.

De todo esto han salido algunos tutoriales de ActiveMQ en la Chuwiki.

Entradas relacionadas:

Leave a Reply