viernes, 5 de diciembre de 2014

Un poquito de mensajería...colas



Es difícil cuando se comienza a utilizar una nueva tecnología, uno no sabe por donde empezar. A continuación  un fácil ejercicio de cómo implementar mensajería en C# con MSMQ. Esperamos que les guste.
Ejemplo: Utilizaremos un caso con  un método EnviarMensaje() que recibirá un objeto de tipo Corredor, que tiene información del corredor de una maratón (dni y nombre de carrera). Posteriormente, este objecto será enviado por medio de un mensaje a una cola para que otro servicio pueda leerlo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void EnviarMensaje(Corredor corredorMsg)
{
    string rutaColaIn = @".\private$\carrerasin";
    if (!MessageQueue.Exists(rutaColaIn))
        MessageQueue.Create(rutaColaIn);
    MessageQueue colaIn = new MessageQueue(rutaColaIn);
    Message mensajeIn = new Message();
    mensajeIn.Label = "Nuevo Corredor";
    mensajeIn.Body = new Corredor()
        {
            dni = carreraMsg.dni,
            carrera = carreraMsg.carrera
        };
    colaIn.Send(mensajeIn);
}

Después necesitamos recorrer la cola donde se depositaron los mensajes y así recuperar los objetos dentro del cuerpo del mensaje. Este código se puede implementar sobre un método cualquiera. En esta caso luego de obtenido el objeto se registra en la base de datos mediante el método CrearCorredor().
1
2
3
4
5
6
7
8
9
10
11
string rutaColaIn = @".\private$\carrerasin";
if (!MessageQueue.Exists(rutaColaIn)) MessageQueue.Create(rutaColaIn);
MessageQueue colaIn = new MessageQueue(rutaColaIn);
foreach (Message mensaje in colaIn.GetAllMessages())
{
    mensaje.Formatter = new XmlMessageFormatter(new Type[]
{ typeof(Corredor) });
    Corredor corredor = (Corredor)mensaje.Body;
    CrearCorredor(corredor);
}
colaIn.Purge();

No hay comentarios:

Publicar un comentario