Escritura log con Fichero UDP y JMS

2
40649

Coste de Envio de mensajes de Log

Cuando desarrollamos una aplicación, muchas veces nos planteamos donde
debemos escribir la información de log.

Si mostramos mensajes por la consola estandar (por pantalla)…… es cómodo pero es muy
lento (aunque siempre podemos redirigir la salida a un fichero)

Podemos tomar la decisión de escribirlos en un fichero local.…. el
problema puede ser, ¿quien limpia luego esos ficheros?. Si trabajamos en
entornos serios, las herramientas de monitorización y backup pueden hacer este
trabajo por nosotros … pero no nos podemos despistar.

Podemos decidir enviar los mensajes a otra máquina y que esta sea quien los
guarde. Si decidimos hacelo via TCP, debemos tener cuidado con controlar bien
esta comunicación porque sería una pena que, porque fallase el sistema de Log,
se parase nuestra aplicación.

Si usamos UDP (comunicaciones ni orientadas a conexion), tenemos que tener en
cuenta que que los paquetes no estan garantizados que lleguen.

Otra posibilidad, es utilizar JMS, es decir, mensajería …. y
luego procesar esos mensajes cuando deseemos.

Pero ¿alguna vez os habeis parado a pensar los que cuesta escribir cada uno
de los mensajes por distintos medios?

Os vamos a mostrar distintos ejemplos para que tengais una referencia.

Mensajes por pantalla y en fichero

Si ejecutamos este código … la respuesta que optenemos es

Es decir, ha costado 25 veces más escribir en pantalla que en disco.

Escritura  UDP

Si creamos un pequeño programa cliente UDP (que envia los mensajes de Log)
.. y un servidor …… tenemos que estar seguros de los que estamos haciendo

Programa cliente

Si lo ejecutamos nos dice

El tiempo transcurrido es 1232 milisegundos

Y ahora el servidor

Pero si vemos la consola del servidor … se nos estan perdiendo datos

Posiblemente … estemos mandandolos muy rápido

Si ahora modificamos un poco nuestro código y ponemos un retardo … podemos
ver que no se pierden datos

Como conclusión, podemos decir que …. si se generan
demasiados mensajes …. y los mandamos todos seguidos ….. se perderán
paquetes … así que tenemos que ser habiles y utilizar mecanismos un poco más
elaborados para asegurarnos de no perder datos.

Envio de mensajes a través de JMS

JMS es un interfaz para interactuar con proveedores de servicio
de mensajería (bueno… más o menos)

Nosotros podemos crear un programa cliente que se conecte a una
cola de mensajes y enviar nuestra información.

Una de las ventajas que puede presentarnos este sistema es que
el gestor de colas podría ser cualquier cosa …… de tan modo que se nos
puede proporcionar de un modo transparente capacidad de persistencia,
transaccionalidad, backup, politicas de enrutamiento …etc.

Nosotros vamos ha hacer un pequeño programa que se conecte a
una cola que hemos creado en el servidor de aplicaciones J2EE de Sun (versión
1.3.1). Tengo que decir que me he vuelto loco intentando hacer funcionar este
ejemplo en la versión 1.4 (con pequeños cambios siguiendo de tutorial de Sun) ….. por lo que al final he desistido y seguido las
recomendaciones de muchos foros de (obviamente esto no es un proyecto vital) usando la 1.3.

Os vamos a mostrar todos los pasos (que son muy sencillos)

  • Nos descargamos el software  J2EE de sun (y lo
    instalamos)

  • Ponemos las variables de entorno

  • Arrancamos el servidor escribiendo

j2ee -verbose

  • Creamos la cola escribiendo

j2eeadmin -addJmsFactory ColaRoberto queue

 

Escribimos el código que manda los mensajes

Ahora el código del cliente (que se diferencia muy poquito del anterior)

Si usais NetBeans  (o cualquier otro entorno gráfico) aseguraos que
encuentra el fichero j2ee.jar

Si arrancamos ahora nuestro programa para enviar mensajes a la cola

El tiempo es un pelín alto.. aunque puede deberse a distintas cosas (como el
lookup de nombre de máquina)

Si paramos el servidor de aplicaciones

Y lo volvemos a arrancar ….. y lanzamos el programa que lee mensajes de la
cola … los mensajes siguen

Mensaje: Creamos un contexto
Mensaje: Buscamos la factoria
Mensaje: Buscamos la cola
Mensaje: Creamos la conexion
Java(TM) Message Service 1.0.2 Reference Implementation (build b14)
Mensaje: Creamos la sesion
Mensaje: Creamos el Receptor de Mensajes
Mensaje: Arrancamos la conexion
Mensaje: Leemos el mensajes
Mensaje: El mensaje recibido es Nuevo mensaje Sat Aug 23 10:38:54 CEST 2003
Mensaje: Cerramos el lector

Hay un linea que marcamos en el programa enviador de mensajes

mensaje.setStringProperty(«TipoMensaje»,
«1»);

Una de las gracias que tiene el uso de JMS, es que te permite
conectar un programa cliente y filtrar solo los mensajes que deseas …..

Si modificamos un poquito el programa receptor (ojo que ahora
leemos 1000 mensajes) .. podemos establecer el filtro a través de propiedades,
con una sintaxis parecida a la de SQL

Como conclusión …. la utilización de colas de mensajes….. penalizando
en tiempo … nos proporciona mayores garantias de entrga y mejores capacidades
de gestión, desacomplando la generación y la captura..

Conclusión General

En función del tipo de aplicación …. debemos decidir cual es el sistema
que más nos interesa

… aunque con este ejemplo si hemos ganado algo claro …. la posibilidad de
tener ejemplos a mano, para hacer nuestras propias pruebas.

 

Sobre el
Autor ..

2 Comentarios

  1. Siguiendo el tutorial, en la parte que ejecuto la linea de comandos \\\»j2ee -verbose\\\» me da el siguiente fallo:

    ERROR: Set JAVA_HOME to the path of a valid jdk.

    Donde tendria que tener instalada la jdk??

    Algo me puede ayudar, Gracias

Dejar respuesta

Please enter your comment!
Please enter your name here