lunes, 21 de abril de 2014

Azure Service Bus y node.js–parte 2

En el post anterior nos conectamos al Windows Service Bus utilizando node.js y obtuvimos la lista de queues que están creadas en el namespace. En este post vamos a enviar un mensaje desde node.js y lo vamos a recibir utilizando también node.js.

Envío del mensaje

Para enviar un mensaje, simplemente invocamos el método sendQueueMessage del ServiceBusService y le indicamos hacia que cola poner el mensaje, el mensaje que queremos enviar y ponemos un callback para manejar el error en caso que se de cuando intentamos poner en el mensaje en la cola. la siguiente figura nos muestra como codificar la invocación a este método.

image

Si ejecutamos el código anterior desde el IDE Cloud9 vamos a darnos cuenta que en el output del terminal se nos indica que el mensaje fue enviado de forma exitosa.

image

Si vamos al portal de Azure, podemos darnos cuenta que el mensaje esta recibido en la cola queuereportes tal y como se lo indicamos en el código anterior.

image

Recibir el mensaje

Para recibir el mensaje desde el bus de servicios de Azure, procedemos con la invocación al método receiveQueueMessage de la clase ServiceBusService. Cuando invocamos este método, le enviamos como parámetro la cola desde donde vamos a recibir el mensaje y un callback para recibir y procesar el mensaje – en este caso solo vamos a desplegar el mensaje en la consola de la terminal.

image

El resultado a la hora de ejecutar el código anterior se ve en la siguiente figura, en donde podemos ver que el mensaje fue recibido – además, se imprimen las propiedades del mensaje que por defecto se imprimen en el toString del objeto.

image

Si vamos al portal de Azure, podemos ver que el mensaje ya fue consumido.

image

Etiquetas de Technorati: ,,

domingo, 20 de abril de 2014

Azure Service Bus y node.js – parte 1

Como hemos venido escribiendo en post anteriores, el bus de servicios de azure no solamente soporta el acceso a través de librerías .NET, si no también se puede acceder con otros lenguajes tales como Java, python y node.js –> si se utiliza AMQP también se puede acceder utilizando otros lenguajes como iremos viendo en post posteriores. En esta serie de post vamos a trabajar con el Azure Service Bus utilizando node.js.

Herramienta de desarrollo

Para este ejemplo vamos a variar un poco  de herramienta de desarrollo y vamos a trabajar con cloud9. Este IDE esta en la nube y es muy popular entre los desarrolladores de node, ya que es un ambiente muy versátil desde donde se pueden hacer prueba, deployment a nubes como Azure, etc.

Instalando el SDK de Azure para node

Para instalar la librería de Azure y tener acceso a los métodos para acceder el Azure Service Bus, vamos a utilizar la consola de Cloud9 y desde ahí vamos a ejecutar el comando npm install azure tal y como se ve en la siguiente figura.

image

Este comando descargara el SDK para Azure y nos permitirá acceder el Azure Service Bus desde nuestro código. Una vez finalizada esta tarea procedemos a cargar la librería de Azure desde nuestro código javascript.

 image

Accediendo el Azure Service Bus con node.js

Seguidamente procedemos a acceder el service bus para verificar que que podemos conectarnos al mismo utilizando las credenciales asignadas en el portal de Azure. Para esto, necesitamos que nuestras credenciales estén incorporadas en las variables de ambiente para que a la hora de ejecutar nuestro código, se pueda conectar al bus de Azure.

image

Estas variables son parseadas por la librería de Azure y busca en las mismas estos valores para iniciar la conexión al bus de servicios. Ahora procedemos a crear un objeto ServiceBusService, el cual nos permite acceder a bus de servicios de Azure.

image

Para este ejemplo vamos a listar la lista de queues que tengo creadas a este momento, lo cual se logra con el siguiente código.

image

Como se puede ver en el listado, utilizamos el método listQueues y procedemos a escribir en la consola el contenido de cada queue, esto porque por defecto el console.dir invoca al toString del objeto. El resultado de ejecutar el código anterior se ve en la terminal del IDE Cloud9, en el cual se pueden ver todos los objetos que existen en la actualidad con sus respectivas propiedades en formato JSON.

image

Etiquetas de Technorati: ,,

sábado, 5 de abril de 2014

Que es AMQP?

“Advanced Message Queuing Protocol ” es un estándar abierto para enviar mensajes entre aplicaciones y/o organizaciones. Este estándar nos permite eliminar el “vendor lock” en lo que respecta a la creación de arquitecturas distribuidas ya que podemos utilizar cualquier intermediario y cambiarlo cuando así lo queramos sin tener necesidad de cambiar el código que escribimos para enviar o recibir los mensajes. Como es un estándar abierto, nos permite conectar aplicaciones que están en distintas plataformas sin necesidad de utilizar un intermediario que le ponga mucho overead a la transacción tal como un bus de servicios de integración en donde normalmente se tiene que enviar para ser procesado en XML y en el peor de los casos usando HTTP.

AMQP en la vida real

Aun sin existir el estándar para manejo de mensajes vías un servidor de colas, este tipo de servidores nos permiten crear aplicaciones distribuidas que nos ayudan a manejar altos volúmenes transaccionales donde no necesariamente alguna de las partes debe de estar disponible para que el envío del mensaje sea exitoso. Este tipo de modelos de operación se aplican de forma común sobre todo en sistemas que procesan transacciones tales como pagos, solicitudes de autorización, manejo de auditorias, etc.

Esta capa intermedia nos permite conectar aplicaciones entre si, dándonos la oportunidad de crear verdaderas aplicaciones distribuidas –> concepto que difiere mucho de tener librerías en un directorio virtual que aunque se podrían utilizar en otras aplicaciones no se hace, porque en realidad al estar en un directorio virtual, están siendo utilizadas de forma local.

Para conectarnos a un servidor AMQP utilizamos diversas librerías disponibles en el mercado, siendo una de las mas comunes Apache Qpid. Esta librería nos permite enviar y recibir mensajes utilizando el estándar AMQP desde cualquier lenguaje soportado y desde el cual se puedan utilizar las librerías; entre los lenguajes incluidos están Java –> JMS, javascript, C++, .NET –> WCF, phyton, Ruby, Perl y una seria de lenguajes que se van agregando a la misma. Igualmente existen otras librerías que nos permiten interactuar con servidores AMQP con otros lenguajes de programación. Es importante destacar que AMQP nos permite interactuar entre diversas plataformas mientras la plataforma se adapte al estándar.

Existen varios servidores que soportan el estándar AMQP, tales como Windows Service Bus, RabbitMQ, Oracle Open Queue, ZeroMQ, etc. Una ventaja con este estándar es que podemos cambiar el servidor sin necesidad de cambiar el código con el cual interactuamos con el servidor, esto nos permite tener una infraestructura distribuida sin estar “amarrado” a una marca en especifico.

Básicamente la forma en que AMQP funciona se puede visualizar en la siguiente figura. Un cliente A tiene una librería en su lenguaje de preferencia que le permite interactuar con un servidor utilizando AMQP; por lo tanto puede enviar mensajes al servidor AMQP. Desde el otro extremo hay otro cliente B que también soporta el estándar AMQP pero no necesariamente utilizan el mismo lenguaje de programación para consumir los mensajes y que puede interactuar con el cliente A sin importar desde que plataforma fue enviado el mensaje.

image

En próximos post vamos a ver como interactúan clientes en plataformas diferentes utilizando AMQP – .NET y Java.

Etiquetas de Technorati: