Temos um servidor central que envia e recebe mensagens de vários PCs localizados nas redes clientes em vários locais. Para facilitar isso, atualmente estou usando o WCF com TCPNetBindings, usando comunicação duplex protegida com certificados.
Agora, temos uma série de problemas com isso - principalmente o fato de estarmos sendo solicitados a oferecer suporte ao "modo desconectado" (precisamos ser tolerantes a falhas). Pelo que sei, não há uma maneira simples de fazer isso usando a pilha do WCF - precisaríamos implementar algo e talvez usar o msmq. Ultimamente, tenho visto o NServiceBus e, pelo que vejo, parece se encaixar bem na tolerância a falhas - tolerância a falhas, mensagens podem ser enviadas pela Internet por meio de um simples gateway http etc. Sei que é bem respeitado na comunidade e Eu posso ver o porquê de olhar para ele.
Então, minha pergunta é ... Empregar o NServiceBus parece uma idéia sensata ou alguém tem outras sugestões / experiências do mundo real relacionadas a isso? Acho que estou preocupado em introduzir uma nova tecnologia sobre a qual eu conheço relativamente pouco e enfrentar problemas com coisas como protegê-la, configurar tudo de uma maneira confiável, truques ao longo do caminho. Também tenho receio de plaquear "a arquitetura e escolher algo brilhante que acabará me atrapalhando na implementação versus ficar com o WCF e apenas fazê-lo funcionar para mim ..
Obrigado!
fonte
Respostas:
Minha sugestão, se você precisar ser rápido sobre isso e precisar apenas de algo simples para facilitar a operação durável (desconectada) com o WCF, é procurar as ligações WCF - MSMQ. Se você precisar de algo em um ambiente maior, consulte o nServiceBus.
Na minha opinião, o nServiceBus realmente começaria a brilhar em um ambiente distribuído maior. Tomemos, por exemplo, o exemplo a seguir (que seria um inferno na terra com o WCF, mas simples com o nServiceBus):
O WCF possui ligações MSMQ
No entanto, se você preferir ficar com o WCF (prazos curtos, outros recursos do WCF), sugiro que você verifique este artigo no MSDN. Ele mostra como usar as ligações do WCF para o MSMQ e, em seguida, mostra como migrar um serviço do HTTP para o MSMQ. Ao longo do caminho, ele mostra alguns dos problemas desse cenário (e soluções úteis para esses problemas).
Ambas as sugestões fazem uso pesado do MSMQ, portanto, uma observação sobre isso: diferente do Apache MQ, RabbitMQ e outros sistemas populares de enfileiramento, o MSMQ não é uma arquitetura de fila típica baseada em broker, é uma fila distribuída. Isso significa que, se o seu cliente WCF enviar uma mensagem por um transporte MSMQ enquanto não puder se conectar ao servidor remoto que hospeda a fila, a máquina cliente enfileirará a mensagem no que é conhecido como "Fila de saída" localmente. A mensagem permanecerá lá com segurança até que o serviço MSMQ do cliente detecte que ele pode se conectar ao serviço MSMQ remoto novamente. Nesse ponto, a mensagem fluirá do cliente para o destino final.
Há pelo menos uma ressalva acima - se o servidor remoto estiver off-line por muito tempo (verifique sua documentação quanto ao MSMQ), o cliente desistirá e moverá a mensagem da saída para a fila de devoluções. As mensagens transferidas para a fila de devoluções não podem ser reenviadas automaticamente, elas devem ser recriadas.
Se você precisar de criptografia e não tiver o ActiveDirectory, nesta entrada de blog , Sergey Sorokin detalha as etapas necessárias para criptografar a comunicação do MSMQ usando o WCF sem o Active Directory.
fonte
Eles não são uma substituição 1 por 1 - muitas vezes você usará o NServiceBus para alimentar mensagens ou receber mensagens de um ponto de extremidade do WCF.
De qualquer forma, lidar com cenários de modo desconectado como este é o lugar onde as filas de mensagens realmente brilham. O NServiceBus é um bom lugar para começar. Existem várias outras opções por aí. Observarei que muitos deles realmente envolvem o MSMQ no final do dia - o MSMQ é um back-end muito sólido e provavelmente vale a pena usá-lo quando estiver acessível.
fonte