Com o MSMQ (Microsoft Message Queue), os desenvolvedores de aplicações podem se comunicar com eles de forma rápida e confiável, enviando e recebendo mensagens. O processamento de mensagens oferece um método confiável e à prova de falhas para garantir mensagens e realizar muitos processos de negócios.
MSMQ, assim como os Serviços Web XML e o .Net Remoting, é uma tecnologia de desenvolvimento distribuído. No entanto, ao usar componentes XML Web Services ou .Net Remoto, o cliente precisa trocar informações com o servidor em tempo real, e o servidor precisa permanecer online. O MSMQ pode funcionar quando o servidor está offline, salvando temporariamente a mensagem na fila de mensagens do lado do cliente e depois enviando-a para o servidor para processamento quando ela estiver online.
Obviamente, o MSMQ não é adequado para situações em que o cliente precisa responder em tempo hábil a partir do servidor, e o MSMQ interage com o servidor de forma assíncrona, então não há necessidade de se preocupar em esperar o servidor processar por muito tempo.
Embora tanto os Web Services XML quanto o .Net Remoting forneçam a propriedade [OneWay] para lidar com chamadas assíncronas, ela é usada para resolver o problema das chamadas longas de método no lado do servidor bloqueando o lado do cliente por muito tempo. No entanto, não consegue resolver o problema da grande carga do cliente, e o servidor aceita requisições mais rápido do que pode processar.
Em geral, o atributo [OneWay] não é usado em serviços especializados de mensagens.
1. Termos e conceitos básicos
Uma "mensagem" é uma unidade de dados transmitida entre dois computadores. Mensagens podem ser muito simples, como conter apenas strings de texto; Também pode ser mais complexo e conter objetos embutidos.
Mensagens são enviadas para a fila. Uma "fila de mensagens" é um contêiner que armazena mensagens durante sua transmissão. O gerenciador da fila de mensagens atua como intermediário ao retransmitir mensagens de sua origem para seu destino. O principal objetivo de uma fila é fornecer roteamento e garantir a entrega das mensagens; Se o destinatário não estiver disponível quando a mensagem for enviada, a fila de mensagens mantém a mensagem até que ela possa ser entregue com sucesso.
"Message Queuing" é a tecnologia de processamento de mensagens da Microsoft que oferece recursos de processamento e enfileiramento de mensagens para qualquer aplicação em qualquer combinação de computadores com Microsoft Windows instalado, independentemente de estarem na mesma rede ou online ao mesmo tempo.
Uma "rede de fila de mensagens" é qualquer grupo de computadores que podem enviar mensagens entre si. Diferentes computadores em uma rede desempenham papéis distintos para garantir que as mensagens sejam processadas de forma fluida. Alguns deles fornecem informações de roteamento para determinar como enviar mensagens, outros contêm informações importantes sobre toda a rede, e alguns simplesmente enviam e recebem mensagens.
Durante a instalação da Fila de Mensagens, os administradores determinam quais servidores podem se comunicar entre si e definem funções especiais para servidores específicos. Os computadores que compõem essa rede de "filas de mensagens" são chamados de "sites" e são conectados entre si por "links de site". Cada sitelink tem um "overhead" associado que é determinado pelo administrador e indica com que frequência as mensagens são entregues por esse sitelink.
O administrador da Fila de Mensagens também configura um ou mais computadores na rede que atuam como Servidores de Roteamento. O servidor de roteamento analisa a sobrecarga de cada sitelink para determinar a forma mais rápida e eficiente de entregar uma mensagem por múltiplos sites para determinar como entregar a mensagem.
2. Tipo de fila
Existem dois tipos principais de filas: filas criadas por você ou outros usuários da sua rede e filas do sistema.
Uma fila criada pelo usuário pode ser qualquer uma das seguintes opções:
Filas públicas são replicadas por toda a rede de Filas de Mensagens e têm potencial para serem acessadas por todos os sites conectados à rede.
Filas privadas não são publicadas em toda a rede. Em vez disso, eles só estão disponíveis no computador local onde residem. Filas privadas só podem ser acessadas por aplicações que conhecem o nome ou etiqueta completa do caminho da fila.
A Fila de Gerenciamento contém mensagens que reconhecem recebimentos de mensagens enviadas em uma determinada rede de Fila de Mensagens. Especifique a fila de gerenciamento que você quer que o componente MessageQueue use, se houver.
A Fila de Resposta contém as mensagens de resposta que são devolvidas ao aplicativo remetente quando o aplicativo alvo recebe a mensagem. Especifique a fila de resposta que você quer que o componente MessageQueue use, se houver.
As filas geradas pelo sistema geralmente são divididas nas seguintes categorias:
A Fila de Diário opcionalmente armazena cópias das mensagens enviadas e cópias das mensagens removidas da fila. Uma única fila de diário em cada cliente de Fila de Mensagens armazena uma cópia das mensagens enviadas daquele computador. Uma fila de diário separada é criada para cada fila no servidor. Este diário acompanha as mensagens que são removidas dessa fila.
A Fila de Cartas Mortas armazena cópias de mensagens que não podem ser entregues ou que já expiraram. Se uma mensagem que expira ou não pode ser entregue for transacional, ela é armazenada em uma fila especial de letras mortas chamada "fila de letras mortas transacional". As cartas mortas são armazenadas no computador onde a mensagem expirada está. Para mais informações sobre mensagens de timeout e expiração, veja Propriedades padrão da mensagem.
A Fila de Relatórios contém mensagens que indicam a rota que a mensagem segue para chegar ao destino, e também pode conter mensagens de teste. Só pode haver uma fila de relatório em cada computador.
Uma fila dedicada do sistema é uma série de filas dedicadas que armazenam as mensagens de gerenciamento e notificação que um sistema precisa para realizar operações de processamento de mensagens.
A maior parte do trabalho realizado na aplicação envolve acessar filas públicas e suas mensagens. No entanto, dependendo do registro diário, reconhecimento e outras necessidades especiais de processamento da aplicação, é provável que várias filas diferentes do sistema sejam usadas nas operações diárias.
3. Comunicação Síncrona VS. Assíncrona
A comunicação em fila é inerentemente assíncrona porque enviar e receber mensagens da fila é feito em processos diferentes. Além disso, a operação de recepção pode ser realizada de forma assíncrona, pois a pessoa que deseja receber a mensagem pode chamar o método BeginReceive para qualquer fila e continuar imediatamente com outras tarefas sem esperar resposta. Isso é muito diferente do que as pessoas conhecem como "comunicação síncrona".
Na comunicação síncrona, o remetente da solicitação deve aguardar uma resposta do destinatário pretendido antes de realizar outras tarefas. O tempo de espera do remetente depende inteiramente do tempo que o destinatário leva para processar a solicitação e enviar a resposta.
4. Interação com Filas de Mensagens
O processamento de mensagens e a mensagem fornecem um mecanismo poderoso e flexível para comunicação entre processos entre componentes de aplicações baseadas em servidor. Eles oferecem várias vantagens em relação à invocação direta entre componentes, incluindo:
Estabilidade – Falhas de componentes afetam muito menos as mensagens do que chamadas diretas entre componentes, pois as mensagens são armazenadas em uma fila e permanecem lá até serem devidamente processadas. O processamento de mensagens é semelhante ao processamento de transações, pois o processamento de mensagens é garantido. Priorização de mensagens – Mensagens mais urgentes ou importantes podem ser recebidas antes de mensagens relativamente insignificantes, garantindo assim tempo de resposta adequado para aplicações críticas. Capacidade offline – Quando as mensagens são enviadas, elas podem ser enviadas para uma fila temporária e permanecer lá até serem entregues com sucesso. Quando o acesso à fila desejada não está disponível por qualquer motivo, o usuário pode prosseguir com a ação. Ao mesmo tempo, outras operações podem continuar como se a mensagem tivesse sido processada, pois a entrega da mensagem é garantida quando a conexão de rede é restaurada. Processamento transacional de mensagens – Acople múltiplas mensagens relacionadas em uma única transação para garantir que as mensagens sejam entregues sequencialmente, apenas uma vez, e possam ser recuperadas com sucesso da fila de destino. Se houver algum erro, toda a transação é cancelada. Segurança – A tecnologia de enfileiramento de mensagens na qual o componente MessageQueue se baseia utiliza a Segurança do Windows para garantir o controle de acesso, fornecer auditoria e criptografar e autenticar mensagens enviadas e recebidas pelo componente.
5. Escrever um programa simples de fila de mensagens no ambiente .Net
(1) Instalar primeiro os serviços de fila de mensagens
Instale o MSMQ pelo Painel de Controle, na etapa "Adicionar/Remover Programas" – "Adicionar/Remover Componentes do Windows".
O MSMQ pode ser instalado tanto no modo grupo de trabalho quanto no modo domínio. Se o instalador não encontrar um servidor rodando uma fila de mensagens que forneça serviços de diretório, ele só pode ser instalado no modo grupo de trabalho, e a Fila de Mensagens neste computador suporta apenas a criação de filas privadas e a criação de conexões diretas com outros computadores que executam Filas de Mensagens.
(2) Configurar o MSMQ
Abrir Gerenciamento de Computadores – Enfileiramento de Mensagens e criar uma fila MSMQDemo sob Filas Privadas
(3) Escrever código - simplesmente demonstrar o objeto MSMQ
A classe MessageQueue é um wrapper em torno de uma "fila de mensagens". A classe MessageQueue fornece uma referência à fila Message Queue. Você pode especificar um caminho para um recurso existente no construtor MessageQueue, ou criar uma nova fila no servidor. Antes de poder chamar Send, Peek ou Receive, você deve associar uma nova instância da classe MessageQueue a uma fila existente.
O MessageQueue suporta dois tipos de recuperação de mensagens: síncrona e assíncrona. Os métodos sincronizados Peek e Receive fazem com que a thread do processo aguarde uma nova mensagem chegar à fila em um intervalo especificado. Os métodos assíncronos BeginPeek e BeginReceive permitem que a tarefa principal da aplicação continue sendo executada em uma thread separada antes que a mensagem chegue à fila. Esses métodos funcionam usando objetos de callback e objetos de estado para facilitar a comunicação de informações entre threads.
Código fonte para download:
Turistas, se quiserem ver o conteúdo oculto deste post, por favor Resposta
|