Tenemos un servidor central que envía y recibe mensajes de varias PC que se encuentran en redes de clientes en varias ubicaciones. Para facilitar esto, actualmente estoy usando WCF con TCPNetBindings, usando comunicación dúplex asegurada con certificados.
Ahora, tenemos una serie de problemas con esto, principalmente porque se nos pide que admitamos el "modo desconectado" (debemos ser tolerantes a fallas). Por lo que sé, no hay una manera simple de hacer esto usando la pila WCF: necesitaríamos implementar algo y quizás usar msmq. He estado mirando NServiceBus últimamente y, por lo que veo, parece encajar bien en la factura: tolerancia a fallas, los mensajes se pueden enviar a través de Internet a través de una simple puerta de enlace http, etc. Sé que es muy respetado en la comunidad y Puedo ver por qué al mirarlo.
Entonces, mi pregunta es ... ¿Emplear NServiceBus suena como una idea sensata, o alguien tiene alguna otra sugerencia / experiencia del mundo real que se relacione con esto? Supongo que me preocupa presentar una nueva tecnología de la que conozco relativamente poco, y enfrentar problemas con cosas como asegurarla, configurar todo de manera confiable, trucos en el camino ... También desconfío del "oro- chapando "la arquitectura y eligiendo algo brillante que terminará empantanándome en la implementación en lugar de seguir con WCF y simplemente hacer que funcione para mí ...
¡Gracias!
fuente
Respuestas:
Mi sugerencia, si necesita ser rápido sobre esto y solo necesita algo simple para facilitar la operación duradera (desconectada) con WCF, es buscar en los enlaces WCF - MSMQ. Si necesita algo en un entorno más grande, mire nServiceBus.
En mi opinión, nServiceBus realmente comenzaría a brillar en un entorno distribuido más grande. Tomemos, por ejemplo, el siguiente ejemplo (eso sería un infierno en la tierra con WCF pero simple con nServiceBus):
WCF tiene enlaces MSMQ
Sin embargo, si necesita apegarse principalmente a WCF (plazos cortos, necesita otras características de WCF), le sugiero que consulte este artículo en MSDN. Le muestra cómo usar los enlaces WCF para MSMQ y luego le muestra cómo migrar un servicio de HTTP a MSMQ. En el camino le muestra algunos de los problemas con este escenario (y soluciones útiles para estos problemas).
Ambas sugerencias hacen un uso intensivo de MSMQ, por lo que una nota al respecto: a diferencia de Apache MQ, RabbitMQ y otros sistemas de colas populares, MSMQ no es una arquitectura de cola basada en un agente típico, sino que es una cola distribuida. Esto significa que si su cliente WCF envía un mensaje a través de un transporte MSMQ mientras no puede conectarse al servidor remoto que aloja la cola, la máquina del cliente pondrá en cola el mensaje en lo que se conoce como "Cola saliente" localmente. El mensaje permanecerá allí de manera segura hasta que el servicio MSMQ del cliente detecte que puede conectarse nuevamente al servicio MSMQ remoto. En ese punto, el mensaje fluirá desde el cliente hasta el destino final.
Hay al menos una advertencia sobre lo anterior: si el servidor remoto está fuera de línea durante demasiado tiempo (verifique su documentación para MSMQ), el cliente se dará por vencido y moverá el mensaje de la cola de mensajes no entregados. Los mensajes transferidos a la cola de mensajes no entregados no pueden reenviarse automáticamente, deben volver a construirse.
Si necesita cifrado y no tiene ActiveDirectory, en esta entrada de blog , Sergey Sorokin detalla los pasos necesarios para cifrar la comunicación de MSMQ utilizando WCF sin Active Directory.
fuente
No son un reemplazo 1 por 1: muchas veces usará NServiceBus para alimentar mensajes o tomar mensajes de un punto final WCF.
En cualquier caso, el manejo de escenarios de modo desconectado como este es donde las colas de mensajes realmente, realmente brillan. NServiceBus es un buen lugar para comenzar. Hay una serie de otras opciones por ahí. Notaré que muchos de ellos realmente envuelven MSMQ al final del día: MSMQ es un back-end muy sólido y probablemente valga la pena usarlo cuando esté accesible.
fuente