Quais são as vantagens de usar o WCF sobre frameworks como MassTransit ou escrito à mão cliente MSMQ?

StackOverflow https://stackoverflow.com/questions/617859

Pergunta

Eu estou olhando para usar MSMQ como uma solução para fazer a execução assíncrona no meu próximo projeto. Eu quero saber as diferenças entre usando WCF e frameworks como MassTransit ou mesmo escrito à mão cliente MSMQ para lugar / ler tarefa off MSMQ.

Basicamente, o aplicativo será vários sites (internos através de LAN ou externas através da Internet) de leitura / gravação de dados através de uma camada de serviço (seja WCF ou serviço web normal). Então esta camada de serviço vai fazer uma de duas coisas: dados 1. gravação ao banco de dados 2. e / ou desencadear o processo de fundo, colocando uma mensagem na fila. 3. obviamente, ele também pode recuperar dados do banco de dados. O agente pouco (um serviço do Windows) do outro lado da fila irá monitorar a fila e executar com base no comando de tarefa.

Esta arquitetura será bastante fácil de escala (adicionar mais filas e agentes) e fácil de implementar em comparação com RPC ou distribuído execução ou qualquer outra coisa. E o agente de transformação não precisa ser em tempo real. E o agente ea camada de serviço são aplicações separadas, exceto que eles compartilham os objetos de domínio comuns e Repositórios etc.

O que você acha? sugestões de arquitetura para os requisitos acima são bem-vindas. Obrigado!

Foi útil?

Solução

WCF adiciona uma abstração sobre MSMQ. Na verdade, uma vez que você definir contratos compatíveis (as operações devem ser OneWay), você pode alternar a MSMQ na configuração, de forma transparente. (Por exemplo, você pode mudar ao normal HttpWS ou um NetTcp vinculativo.)

Você deve avaliar os outros benefícios do WCF, como segurança e assim por diante, para ver como as encaixa com suas necessidades. Novamente, eles devem ser razoavelmente transparente do fato de que você está usando MSMQ por baixo. Por exemplo, a adição de segurança SOAP e assim por diante deve "apenas trabalho", independente do uso de MSMQ.

(Embora, IIRC, você ainda precisa fazer o login para o ambiente de trabalho em cada máquina que usa MSMQ, com a conta de serviço que vai usar MSMQ , para gerar o certificado nas máquinas em seu perfil local. E então, ele não funciona muito bem desde IIS6, já que os perfis de usuário não são carregados. a verdadeira dor em geral, mas nada a ver com WCF especificamente.)


Além de que:

Você já olhou para o SQL Server Service Broker? Depois de usar MSMQ + WCF e SSSB, acho que SSSB é muito mais fácil de configurar e gerenciar. SSSB trabalha com T-SQL comandos sobre qualquer SQL cliente (eu usá-lo a partir de Mono, no Linux, com transações). Ele também vai dar-lhe envio transacional / receber, mesmo que remotamente (eu acho MSMQ 4 agora permite isso). Ele realmente tem um monte de dor longe de enfileiramento de mensagens, e se você estiver usando SQL Server já ...

SSSB é muitas vezes esquecido desde o SQL Management Studio não tem designers de GUI para tudo, mas não é difícil e é uma ótima opção. A única desvantagem é que, se você quer a capacidade de envio local (ou seja, a mensagem quando a rede está em baixo fila), você precisa executar uma instância local do SQL Express.

Outras dicas

A sua arquitetura parece som e razoável. No entanto, você deve considerar o uso do transporte MSMQ net WCF sobre a mão aulas MSMQ codificados. WCF envolve essa funcionalidade comum em um modelo de programação agradável. Também eu acredito que há algumas melhorias no protocolo usado pelo WCF comparação com System.Messaging básica

Tenha um olhar para o valor agregado sobre MSMQ simples:

http://readthedocs.org/docs/masstransit/en/ latest / overview / valueadd.html

Em resumo, você terá um monte de mensagens de conceitos claramente apresentados na API com MassTransit; a um ponto que você não teria se você mão-coded ou WCF usado.

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