Pergunta

Estou trabalhando em um sistema de mensagens/notificação para nossos produtos.Os requisitos básicos são:

  • Dispare e esqueça
  • Conjunto persistente de mensagens, possivelmente em atualização, para permanecer lá até que o remetente peça para removê-las

As bibliotecas serão escritas em C#.Spring.NET acaba de lançar uma compilação marcante com muitas abstrações de mensagens interessantes, o que é ótimo - pretendo usá-lo extensivamente.Minha pergunta básica se resume à questão dos corretores de mensagens.Minha arquitetura será semelhante a aplicativo -> fila do corretor de mensagens -> aplicativo de servidor que escuta, despacha todas as mensagens para onde elas precisam ir e lida com o ciclo de vida dessas mensagens de longa duração -> fila ou tópico do corretor de mensagens -> escuta aplicativos.

Finalmente, a pergunta:Qual corretor de mensagens devo usar?Eu sou tendencioso em relação ActiveMQ - Usamos em nosso último projeto e adoramos.Eu realmente não consigo pensar em um único ataque contra ele, exceto que é Java, e exigirá que o Java seja instalado em um servidor em algum lugar, e isso pode ser difícil de vender para algumas pessoas que usarão este serviço.A outra opção que estou analisando é o MSMQ.Sou tendencioso contra isso por algum motivo desconhecido e também não parece ter um ótimo suporte multicast.

Alguém já usou o MSMQ para algo assim?Quaisquer prós ou contras, coisas que possam influenciar a votação de uma forma ou de outra?

Uma última coisa, estamos usando o .NET 2.0.

Foi útil?

Solução

Sou meio tendencioso enquanto trabalho ActiveMQ mas praticamente todos os benefícios listados acima para o MSMQ também se aplicam ao ActiveMQ.

Mais alguns benefícios do ActiveMQ incluem

A principal desvantagem mencionada é que o corretor ActiveMQ é escrito em Java;mas você pode executá-lo no IKVM como um assembly .net se realmente quiser - ou executá-lo como um serviço do Windows ou compilá-lo em um DLL/EXE via GCJ.O MSMQ pode ou não ser escrito em .NET - mas realmente não importa muito como ele é implementado, certo?

Independentemente de você escolher MSMQ ou ActiveMQ, recomendo pelo menos considerar usar o API NMS que, como você disse, está perfeitamente integrado ao Spring.NET.Há uma implementação MSMQ desta API, bem como implementações para TibCo, ActiveMQ e STOMP que darão suporte a qualquer outro provedor JMS via StompConnect.

Portanto, ao escolher NMS como sua API, você evitará ficar preso a qualquer tecnologia proprietária - e poderá trocar facilmente de provedor de mensagens a qualquer momento;em vez de bloquear todo o seu código em uma API proprietária

Outras dicas

Prós para MSMQ.

  • Está integrado no Windows
  • Suporta transações, mas também suporta filas sem transações
  • É muito fácil de configurar
  • Integração AD
  • É rápido, mas você precisaria comparar ActiveMQ e MSMQ para que seu tráfego soubesse qual é mais rápido.
  • .NET suporta natividade
  • Suporta fogo e esquecimento
  • Você pode dar uma espiada na fila, se tiver leitores que apenas olham.não tenho certeza se você pode editar uma mensagem na fila.

Contras:

  • Limite de tamanho de mensagem de 4 MB
  • Limite de tamanho da fila de 2 GB
  • Os itens da fila são mantidos no disco
  • Não é um produto MS convencional, os documentos são um pouco duvidosos ou já se passaram alguns anos desde que os usei.

Aqui está um bom blog para MSMQ

Dê uma olhada zeromq.É uma das filas de mensagens mais rápidas do mercado.

Eu sugiro que você dê uma olhada no TIBCO Enterprise Messaging Service - EMS, que é um produto de mensagens de alto desempenho que suporta multicasting, roteamento, suporta especificação JMS e fornece recursos para toda a empresa, incluindo seus requisitos, como fire-forget e persistência de mensagens usando arquivo/banco de dados usando estado compartilhado.

Como referência, a FedEx é executada no TIBCO EMS como sua infraestrutura de mensagens.

http://www.tibco.com/software/messaging/enterprise_messaging_service/default.jsp

Existem muitas outras referências, se eu fornecer, você ficaria realmente surpreso.

Existem tantas opções nessa área...

Livre:MantaRay, um sistema ponto a ponto totalmente compatível com JMS.A parte interessante do Mantaray é que você só precisa definir para onde a mensagem vai e o MantaRay a roteia de qualquer maneira para levar sua mensagem ao seu destino - por isso é mais resistente a falhas de nós individuais em sua estrutura de mensagens.

Pago:No meu trabalho diário, administro um sistema de mensagens IBM WebSphere MQ com várias centenas de nós e descobri que ele é muito bom.Também adquirimos recentemente o Tibco EMS e parece que também será muito bom de usar.

Paulo/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top