segunda-feira, 30 de maio de 2011

Trabalhando com Fila de Mensagem

Por: Carlos Bueno (DotGnu)


Código Fonte Projeto Fila de Mensagens:  Clique aqui para Download

Nesse artigo, iremos construir uma aplicação de fila de mensagens. No exemplo que segue teremos: a classe para envio e recebimento, uma classe com a estrutura de dados que enviaremos e um Form chamando as rotinas criadas.

Inicialmente cheque se a fila de mensagens esta funcionando no services do windows, caso não exista o serviço você deve fazer a instalação. Siga as instruçoes no site do msdn http://msdn.microsoft.com/pt-br/library/19ww660c(v=vs.80).aspx (Installing Mensagem Queuing - Localizado bem no final da página)

Para utilizarmos a fila de mensagem primeiro devemos adicionar em nosso projeto a referencia "System.Messaging" e, fazer a chamada no using em nossa classe, assim como, utilizamos no exemplo da Classe ClassMessaging.

Para adicionar a referencia, devemos clicar com o botão direito do mouse na aba de projetos e clicar em Add Reference e selecionar a referencia que desejamos (Assim como figura abaixo) no caso a supracitada.



A classe ClassMessaging é responsavel por enviar e receber mensagem da Fila. Não irei explocar ponto a ponto os comandos da classe, irei fazer comentario diretamente no código, caso haja duvidas podem postar que retornarei.


using System;
using System.Text;
using System.Messaging;
using DevDicas.Framework.Estrutura;

namespace DevDicas.Framework.Mensagem
{

public class ClassMessaging
{
//Nome da Fila
private String namef;
public int globi;
//Objeto que será enviado, no caso uma clase contendo uma estrutura de dados
private Envio sentOrder;
//Objeto da fila de mensagens
private MessageQueue myQueue;

public ClassMessaging()
{

}

//Esse metódo será usado para criarmos nossa fila, sempre deverá ser usado antes do uso
private  void CreateSendQueue()
{
//No nosso exemplo criaremos o nome da fila a partir do nome da maquina
namef = System.Environment.MachineName.ToString();
//Setamos o caminho que será gravado a fila
namef = namef + "\\Private$\\tname";
//Verificamos se existe o arquivo de fila, caso exista apenas o utilizaremos senão criaremos uma nova fila
if (!MessageQueue.Exists(namef))
{
//Utilizamos a fila já existente
myQueue = MessageQueue.Create(namef);
}
else
{
//Criamos uma nova fila
myQueue = new MessageQueue(namef);
}


}

//Metodo para envio da mensagem
public Envio Send(Envio _envio)
{
this.CreateSendQueue();
myQueue.Send(_envio);
}
//Metodo para recebimento da mensagem
public  void Receive()
{
try
{

myQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(Envio) });
var message = (Envio)myQueue.Receive().Body;            
}
catch (MessageQueueException e)
{
String x = e.ToString();
}
catch (InvalidOperationException e)
{
String x = e.ToString();
}
return message;

}


}
}



Devemos criar também a clase contendo a estrutura de dados que será enviada, no caso a classe envio, utilizamos duas variaveis nessa estrutura ID e Nome, ambas string.

Nesse artigo, iremos construir uma aplicação de fila de mensagens. No exemplo que segue teremos: a classe para envio e recebimento, uma classe com a estrutura de dados que enviaremos e um Form chamando as rotinas criadas.

Inicialmente cheque se a fila de mensagens esta funcionando no services do windows, caso não exista o serviço você deve fazer a instalação. Siga as instruçoes no site do msdn http://msdn.microsoft.com/pt-br/library/19ww660c(v=vs.80).aspx (Installing Mensagem Queuing - Localizado bem no final da página)

Para utilizarmos a fila de mensagem primeiro devemos adicionar em nosso projeto a referencia "System.Messaging" e, fazer a chamada no using em nossa classe, assim como, utilizamos no exemplo da Classe ClassMessaging.

Para adicionar a referencia, devemos clicar com o botão direito do mouse na aba de projetos e clicar em Add Reference e selecionar a referencia que desejamos (Assim como figura abaixo) no caso a supracitada.



A classe ClassMessaging é responsavel por enviar e receber mensagem da Fila. Não irei explocar ponto a ponto os comandos da classe, irei fazer comentario diretamente no código, caso haja duvidas podem postar que retornarei.


using System;
using System.Text;
using System.Messaging;

namespace DevDicas.Framework.Estrutura
{
public class Envio
{
public string Id;
public string Nome;
}
}


Agora criaremos um WinForm como o abaixo contendo os botoes enviar e receber.



Temos que na Form criar uma variavel publica da classe ClassMessaging assim:

public ClassMessaging msg = new ClassMessaging();


No evento clique do botão enviar deve conter o código:

using System;
Envio _envio = new Envio;
_envio.Id = TextId.Text;
_envio.Nome = TextId.Text;
msg.Send(_envio);


E no evento clique do botão receber deve conter o código:

using System;
Envio recebimentoEnvio = msg.Receive();
TextId.Text = recebimentoEnvio.Id;
TextId.Text = = recebimentoEnvio;



Pronto agora devemos apenas testar a nossa aplicacação clicando em enviar para enviar a mensagem das caixar de texto e depois em receber.

Espero que seja util e caso tenham problemas em desenvolvimento de outras aplicações podem enviar mensagem que terei prazer em excrever um artigo tirando as suas duvidas.

Nenhum comentário:

Postar um comentário