C# RabbitMQClient: Productor de mensajes básico (con WSO2) usando .NET/C# en VS2012

RabbitMQ es un broker de mensajería (ver entrada RabbitMQ primeros pasos con colas de mensajería). Vamos a tratar de usar el cliente para .NET en  un proyecto con MS Visual Studio 2012 para conectar a un broker de mensajería WSO2 (ver WSO2: Broker de mensajería IoT (WSO2 IoTS))

Para instalar el paquete RabbitMQ.Client en VS2012  es recomendable usar el gestor de paquetes incorporado NuGet (RabbitMQ.Client 4.1.3) ejecutando el siguiente comando:

PM> Install-Package RabbitMQ.Client -Version 4.1.3

Para instalar el paquete previamente hemos creado un nuevo proyecto C# para consola.

Importamos la librería con la línea


using RabbitMQ.Client;

La clase ConnectionFactory construye instancias de IConnection y permite configurar el nombre el host, el virtual host y las credenciales de acceso. En vez usar las propiedades  factory.UserName, factory.Password… Compactamos la cadena de conexión en una sola línea usando la propiedad URI.


ConnectionFactory factory = new ConnectionFactory();
factory.Uri = "amqp://admin:admin@localhost:5672/carbon";

WSO2 usa el puerto TCP 5672 como broker de mensajería con el protocolo AMQP, podemos cambiar en cualquier momento el puerto editando el fichero C:\wso2mb-3.1.0\repository\conf\broker.xml.


El último parámetro del URI es el VHost, en WSO2 podemos encontrar información del VHost en C:\wso2mb-3.1.0\repository\conf\advanced\qpid-virtualhosts.xml. El VHost por defecto se llama “carbon”. Dentro del fichero también encontramos información sobre el exchange y queue (“amq.direct" is the default exchange that should be used for queue creation.).


IConnection conn = factory.CreateConnection();

IModel channel = conn.CreateModel();
channel.ExchangeDeclare("amq.direct","direct",true);

Le pasamos la conexión a la instancia IConnection empleado para crear nuevos canales.  La llamada a CreateConnection produce una excepción si el servidor WSO2 está parado por ejemplo.

El interface IModel se usa para el modelo AMQP le pasamos tres parámetros al método ExchangeDeclare. 

  • exchangeName: Un productor nunca envía directamente los mensajes directamente a la cola, en su lugar los envía a un exchange.

 

  • type: Debe ser uno de los siguientes “direct” (los mensajes van sólo a la cola especificada en routingKey), “topic”, “headers” o “fanout” (broadcast a todas las colas).
  • El tercer parámetro “durable” a true mantiene la cola persistente en el servidor.

La última parte es publicar el mensaje usando el método BasicPublish.

 var message = GetMessage(args);
 var body = Encoding.UTF8.GetBytes(message);
 
 channel.BasicPublish(exchange: "amq.direct",
 routingKey: "test-queue",
 basicProperties: null,
 body: body);

 channel.Close();
 conn.Close();

Código completo

Crear la cola en “test-queue” en WSO2

En el servidor WSO2 creamos una cola llamada “test-queue” a media que ejecutemos nuestro cliente publicador irá aumentando el contador de mensajes.

 

Referencias

WSO2: Broker de mensajería IoT (WSO2 IoTS)

WSO2 es un servidor de mensajería para conectar dispositivos IoT (ver entrada RabbitMQ primeros pasos con colas de mensajería), funciona como muchos otros servidores sobre un motor JDK (JMS – Java Message Service) lo que lo convierte en una solución multiplataforma de facto.  Permite trabajar con la base de datos embebida con la aplicación, para entornos empresariales puede trabajar con los sistemas de gestión de bases de datos más populares como Oracle, MySQL, PostreSQL.

Sin entrar en detalles un broker funciona como un enrutador de mensajería, las aplicaciones que se comunican con el servidor de mensajería pueden jugar varios roles, como productor / publicador de mensajes en un topic (gestión de colas basadas en contenidos) determinado o como consumidores / subcriptores de mensajes (Publish–subscribe pattern). El nodo central puede recibir de múltiples origenes y enrutar el mensaje al canal correcto, incluso transformar el mensaje a una representación alternativa.

WSO2: Working with Topics

Es arquitectura favorece la escalabilidad y la incorporación de nuevos nodos. La dependencia mutua entre aplicaciones se minimiza (decoupling), los publicadores que envían mensajes no lo hacen directamente a un receptor especifico, no tienen porque saber si al otro lado hay una aplicación, varias o ninguna recibiendo esos mensajes.

Podemos descargar el servidor del siguiente enlace. En la Web de descarga también ofrecen la subscripción a la comunidad y hospedar nuestra infraestructura IoT en su nube (Beta y previo pago).

Protocolos soportados:

  • Advanced Message Queuing Protocol (AMQP)(0-91))
  • Message Queuing Telemetry Transport Protocol (MQTT) v 3.1.1.

WSO2 IoTS es Open Source. He descargado el servidor wso2mb-3.1.0.zip a mi PC con Win7Pro y lo he descomprimido desde el raíz C:\wso2mb-3.1.0\.

Estructura de carpetas principales:

  • README.txt: El primer fichero que hay leer siempre.
  • bin: Script para Shell Linux y DOS.
  • client-lib: librerías JMS.
  • dbscripts: Scripts SQL para MySQL, Oracle…
  • lib: Librerías necesarias para WSO2.
  • repository.
    • conf: Ficheros de configuración.
    • database.
    • logs: Ficheros de logs de la ejecución.
  • resources: Recursos adicionales.
  • tmp: Ficheros temporales.

Una vez descomprimido sólo debemos ejecutar el script \bin\wso2server.bat para arrancar el servidor.

Una vez que arranca podemos administrar el servidor usando la aplicación Web en la siguiente dirección: https://localhost:9443/carbon  (usuario “admin” y clave “admin” por defecto).

Referencias externas:

 

 

 

 

 

Linux LiveUSB desde Win (V): Sólo falta la copia de seguridad!

Después de actualizar los paquetes de XUbuntu con las últimas versiones y siempre antes de empezar a instalar aplicaciones o copiar películas y archivos es mejor clonar la memoria SD y guardarla para restaurar más adelante si tenemos cualquier problema o si simplemente queremos repetir el proceso pero mucho más rápido.

Descargamos  e instalamos RMPrepUSB.

rpm1

 

Usamos la opción “Drive –> File” para obtener una imagen de la memoria en un archivo img (se puede comprobar el contenido abriendo el fichero img con 7Zip por ejemplo).

Enlaces:

Entradas relacionadas:

Linux LiveUSB desde Win (IV): Final

Bueno espero que este sea el último artículo sobre el tema,  después de un recorrido por viejos recuerdos con sistemas Linux en memorias extraibles, creo que en los últimos posts he recorrido el camino tortuoso y la solución es más sencilla.

  • Paso 1: He creado 2 particiones con Easus, no es necesario ya que se puede hacer probablemente más adelante con el arranque en “vivo” con la imagen ISO de XUbuntu usando el gestor de particiones (GParted?) en VMWare. En primer lugar he colocado la partición con etiqueta DATA (20GB) para guardas archivos, la he formateado como Fat32 para que mi PC con Win32 reconozca y pueda copiar archivos pinchando la memoria SD (películas, series, aplicaciones…). La siguiente partición la he etiquetado como LINUX donde instalaré en el siguiente paso XUbuntu.

ea1

  • Paso 2: He arrancado una máquina virtual en VMWare con la ISO de XUbuntu como arranque y con el lector externo de tarjetas SD habilitado dentro de la VM (Virtual Machine). Cuando arranca desde la ISO de XUbuntu utilizo la opción de instalación usando la partición EXT2 como raíz del sistema en la partición LINUX y dejando intacta la partición DATA en Fat32 para almacenar archivos.

Configuración VMWare para que arranque leyendo la ISO de Xubuntu emulando un lector de CD:

xu1

VMWare mostrando el menú de arranque de la ISO donde seleccionamos la opción de instalar:

xu2

xu3

He usado el gestor de instalación de XUbuntu para reservar espacio para la memoria swap redimensionado la partición LINUX (también debería haber reservado otra partición para el home del usuario Linux…)

xu4

Configuración de la cuenta:

xu5

Proceso de instalación en progreso:

xu6

  • Paso 3: He probado que la memoria SD arranca correctamente usando PLoP en VMWare (cambiando la ISO a Plop como emulación de CD).

ux1

XUbuntu recién instalado y arrancado con acceso a unidad DATA de almacenamiento de archivos:

ux2

  • Paso 4: Prueba “real” arrancando la memoria desde desde la BIOS del PC.

 

Entradas relacionadas:

Linux LiveUSB desde Win (||): PLoP Boot Manager

PLoP es un gestor de arranque que permite arrancar el SO (Sistema Operativo) desde un USB a pesar de que la BIOS de nuestro PC no lo permita, va a resultar muy útil para probarlo con VMWare Player (no permite cambiar el orden de arranque de la BIOS de la maquina virtual) para probar nuestro USB con Linux autoarrancable.  Lo más común es grabar la imagen ISO de PLoP es un CD y arrancar nuestro PC con el para luego cargar el USB desde el menú gráfico de PLoP. Para probarlo en WMWare no es necesario, crearemos una máquina virtual nueva en unos pocos sencillos pasos siguiendo las instrucciones del siguiente enlace “How to Boot a VMware Virtual Machine from a USB Drive“.

Descargamos plpbt-5.0.15.zip (la última versión) y descomprimimos. Dentro encontraremos la imagen plpbt.iso que debemos cargar en nuestra máquina virtual emulando el lector de CD. Creamos una máquina virtual en WMWare con las siguientes características:  En la opción inicial “Installer Disc image file” seleccionamos la ISO de PLoP, seleccionamos Linux como sistema (Ubuntu), damos nombre a la nueva máquina y un tamaño de HD de 5GB.  Finalmente y lo más importante nos aseguramos que el controlador USB está configurado.

Cuando arranquemos la nueva máquina virtual y tenemos listo Plop para tratar de arrancar del USB.

plop1

  • ADVERTENCIA: Para que VMWare detecte mi lector de tarjetas SD externo he tenido que desconectarlo de mi SO Win7 y en el menú de VMWare Player seleccionar entre los dispositivos removibles “Player > Removable devices > Alcor Micro Mass Storage Device: Connect (disconnect from host)”.

plop2

  • PROBLEMAS: Ahora tengo un nuevo problema, al seleccionar la opción probar Xubuntu sin instalarlo me salta la ventana de error con la leyenda “/casper/vmlinuz: not found” y no me permite continuar. Cuando analizo los archivos de la memoria SD efectivamente el fichero no existe. Ni corto ni perezoso estoy bajando xubuntu-14.04.5-desktop-i386.iso para probar otras versiones de la distro.

Para solucionar el problema mencionado he usado UNetbootin para reinstalar la ISO de XUbuntu. UNetbootin instala su propio Bootloader con syslinux.

plop4

Ahora arranca perfectamente la versión live sin instalación.

plop5Arrancando la versión live podemos proceder a la instalación de XUbuntu.

 

 

Aplicaciones:

Entradas relacionadas en este blog:

Artículos:

Linux LiveUSB desde Win (|||): EaseUS Partition Master Free versión

Sigo a partir de la entrada “Linux LiveUSB desde Win con persistencia de datos“, el objetivo es particionar la memoria SD para alojar el SO (Sistema Operativo) en una y archivos de datos en la otra. En Win usaré una herramienta ya conocida llamada EaseUS Partition Master Free versión 11.9  en su versión gratuita. Hace falta descargar e instalar.

easus1

Una vez ejecutado podemos ver todas las particiones de nuestro PC:

easus2

Seleccionamos la unidad correspondiente a la memoria externa (letra G:) y comenzamos eliminando la partición (botón derecho del ratón y seleccionar en el menú emergente la opción “Eliminar partición”).

Ahora ya esta limpia y podemos comenzar creando nuevas particiones.

easus3

Como es una memoria de 32 GB voy a particionar:

  • La primera partición con etiqueta “DATA” para datos con 15GB de espacio de tipo lógica.
  • La segunda partición llamada “LINUX” con el resto de datos de tipo primaria.

easus5

Una vez finalizado aplicamos los cambios (botón “Aplicar cambios” en la parte superior).

easus6

Comienza el proceso:

easus7

Ahora volvemos sobre el post “Linux LiveUSB desde Win con persistencia de datos”  para grabar la imagen con el SO autoarrancable en la segunda partición con LinuxLive USB Creator (LiLi para los amigos).

Elegimos la unidad a grabar la ISO:

easus8

La fuente de origen es ISO y está descargada en el PC local como xubuntu-16.04-desktop-i386.iso, tamaño de persistencia de datos 4090 (el máximo). Comenzamos el proceso.