Mensajería en las aplicaciones(Parte 2)
Primer entrega aquí
Modelos de envío en JMS
La diferencia entre un Topic y una Queue es que en el caso de de los Topic todos sus subscriptores reciben el mismo mensajes cuando el mensaje es publicado y en el caso de las Queue es que solo un receptor recibe el mensaje cuando este es depositado en la cola.
Diagramas
Topic:
Este término es utilizado para enviar mensajes de uno a varios destinatarios (sistemas) y utiliza el modelo publish-subscribe
Queue:
Este termino es utilizado cuando se planea que el mensaje sea enviado únicamente a un receptor cuando un “Sender” envía un mensaje a la cola.
Casos prácticos
Ahora definiré un par de casos prácticos donde se utilizan este tipo de modelos.
Topic:
Supongamos que tenemos una aplicación de administración de productos y debemos informar a todos nuestros clientes cuando un nuevo producto es agregado a nuestro catalogo.
Para esto nosotros brindamos a nuestros clientes su subscripción con un costo de 100 pesos con el fin de garantizarles que tendrán la primicia en saber de nuestros nuevos productos y no tener que comprar la revista mensual y así poder alimentar sus sistemas.
Así que, cuando nosotros agreguemos un producto. El sistema publica el mensaje y todos nuestros suscriptores sabrán en tiempo real acerca de los productos agregados.
Queue:
Tenemos una aplicación de compra con tarjeta de crédito dando al realizar una compra se le envíe un correo al usuario informándole que su transacción esta siendo procesada y pronto se le enviara una respuesta con su autorización. Para que hacemos esto? Para no dejar al cliente esperando en línea mientras su transacción es procesada, entonces. El sistema lo que hace es depositar un mensaje en la cola y listo! Se notifica al usuario que pronto se le notificara, mientras tanto el receptor que tome el mensaje hará la consulta con el banco correspondiente para saber que el usuario tiene fondos suficientes para su compra y así de esta forma informarle si su transacción es exitosa o no.
Ejemplo simple de envío de mensajes con ApacheMQ
NOTA: Para este ejemplo se requiere este software.
Descargamos los binarios de la aplicación y los descomprimimos en una carpeta, la cual llamare APACHEMQ_HOME
Entramos a APACHEMQ_HOME/bin y ejecutamos el siguiente comando:
Java –jar run.jar start
Con esto, nuestro servidor de mensajería esta listo, y si escribimos en el navegador la siguiente ruta
Veremos la siguiente pantalla
Ya teniendo el servidor ejecutando, podremos crear nuestras colas desde la pestaña de queues
Ahora, ya teniendo esto… pasemos al código. En el siguiente ejemplo mostrare como enviar un mensaje y mas adelante como recibirlo.
Después de ejecutar el código anterior nos dirigimos a nuestro navegador web y en la pestaña de colas, debió aparecer la cola FOO y debe contener un mensaje.
Al dar click en la cola nos mostrara los mensajes que estan contenidos en esta.
Y al dar click en el mensaje podremos ver el mensaje enviado.
Y listo! Ya enviamos mensajes a una cola!!
Ahora… ¿Cómo lo consumimos?
Para esto debemos crear un receptor… el cual debe tener un MessageListener que apunte a la cola que deseamos monitorear.
Al ejecutar este codigo, nos daremos cuenta que esta clase se queda corriendo. Esto es debido al MessageListener que implementa y nos daremos cuenta que nos pintara en consola lo siguiente:
El mensaje es: ActiveMQTextMessage {commandId = 5, responseRequired = true, messageId = ID:acasarru1-1806-1272064274636-0:0:1:1:1, originalDestination = null, originalTransactionId = null, producerId = ID:acasarru1-1806-1272064274636-0:0:1:1, destination = queue://FOO, transactionId = null, expiration = 0, timestamp = 1272064274839, arrival = 0, brokerInTime = 1272064274839, brokerOutTime = 1272064274917, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = null, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, text = hola}
**************************
El texto del mensaje es: hola
Listo, ya podemos enviar y recibir mensajes
Saludos
PD Si alguien requiere el zip favor de solicitarmelo ya que no lo puedo adjuntar aqui.
- jali's blog
- Inicie sesión o regístrese para enviar comentarios
GRACIAS
Gracias hermano, llevo unos días estudiando y tratando de comprender esto, lo pusiste en bandeja de plata, salu2
No hay de que
Espero que te sirva y ps cualquier cosa pues por aca ando.
Jali Consulta
Buenas y muchas gracias por la info =D .. .pero estoy ejecutando la clase Mensajero y me arroja el siguiente error:
java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
cuando quiere ejecutar la siguiente linea connectionFactory = new ActiveMQConnectionFactory("system", "manager", "tcp://localhost:61616");
Yo agregue las librerias que me incluia el ActiveMQ 5.5.1. Me podras dar una mano ??
Muchas Gracias.
RTFS
RTFS.
Es obvio el error si le dedicas dos segundos, menos de lo que te tardaste en copiar/pegar:
java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
NoClassDefFoundError es un error en tiempo de ejecución que ocurre cuando se necesita cargar una clase que no se encuentra en el classpath. Y te indica la clase que no encontró. Simplemente sustituye las diagonales por puntos y obtendras org.slf4j.impl.StaticLoggerBinder. Y entonces buscas eso en Google.
Tu problema seguramente es que metiste sólo slf4j-api.jar pero no tienes ninguna implementación para tiempo de ejecución. Necesitas SLF4J para log4j o JUL o logback, o aunque sea el slf4j-simple, dependiedo del sistema de logging que use el ambiente donde ocurrió este problema.
RTFS
Muchas Gracias por la respuesta!! ahora voy a buscarlo..
Consulta
Me anduvo de maravilla... Ahora les queria hacer una consulta. Asi tal cual tengo el codigo, si lo quiero deployar en el WAS de ibm tendria que modificar algo ?? o solo tendria que configurar una cola con el nombre que tiene seteado el proyecto....
Muchas Gracias
Consulta
Que tipos de mensajes puede mandar Santa y cuando se entera que los niños estan disfrutando de los juguetes