¿Debo cambiar de WCF a NserviceBus?

13

Tenemos un servidor central que envía y recibe mensajes de una serie de PC que se encuentran en las redes de los clientes en varias ubicaciones. Para facilitar esto, actualmente estoy usando WCF con TCPNetBindings, usando comunicación dúplex asegurada con certificados.

Ahora, tenemos varios problemas con esto, principalmente porque se nos pide que admitamos el "modo desconectado" (debemos ser tolerantes a los fallos). Por lo que sé, no hay una forma sencilla de hacerlo utilizando la pila WCF: necesitaríamos implementar algo y quizás usar msmq. He estado buscando en NServiceBus últimamente, y por lo que veo, parece que encaja bien: tolerancia a fallos, los mensajes se pueden enviar 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 introducir una nueva tecnología de la que sé relativamente poco, y enfrentar problemas con cosas como asegurarlo, configurarlo todo de una manera confiable, errores en el camino ... También desconfío del "oro" colocando en la arquitectura, y eligiendo algo brillante que termine atascándome en la implementación en lugar de seguir con WCF y simplemente hacer que funcione para mí ...

¡Gracias!

    
pregunta Matt Roberts 18.06.2012 - 15:33

2 respuestas

12

Mi sugerencia, si necesita ser rápido con 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 mente, nServiceBus realmente comenzaría a brillar en un entorno distribuido más grande. Tomemos, por ejemplo, el siguiente ejemplo (que sería un infierno en la tierra con WCF pero simple con nServiceBus):

  • Infraestructura compuesta por nivel de servidor de aplicaciones, nivel de servidor de caché, nivel de base de datos de solo lectura, nivel de base de datos de lectura / escritura
  • Cada vez que el cliente envíe una nueva entrada, le gustaría que todos estos niveles se actualizaran a la vez
  • En WCF, deberías exponer servicios separados en cada nivel y hacer que el cliente los envíe a todos (o hacer que una organización central haga lo mismo por ti)
  • En nServiceBus usted tendría a cada nivel un suscriptor a esta información, y el cliente la publicaría una vez, permitiendo que el bus de servicio se ocupe del resto

WCF tiene enlaces MSMQ

Sin embargo, si necesita seguir con WCF principalmente (líneas de tiempo breves, necesita otras funciones de WCF), le sugiero que visite 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, así que una nota al respecto: a diferencia de Apache MQ, RabbitMQ y otros sistemas de colas populares, MSMQ no es una arquitectura de colas basada en un corredor típico, sino que es una cola distribuida. Esto significa que si su cliente de WCF envía un mensaje a través de un transporte de MSMQ mientras no puede conectarse al servidor remoto que aloja la cola, la máquina del cliente colocará el mensaje en la cola en lo que se denomina "Cola de salida" localmente. El mensaje permanecerá allí de manera segura hasta que el servicio MSMQ del cliente detecte que puede conectarse nuevamente al servicio remoto MSMQ. En ese momento, el mensaje pasará del cliente al destino final.

Hay al menos una advertencia a lo anterior: si el servidor remoto está fuera de línea por mucho tiempo (verifique la documentación de MSMQ), el cliente se dará por vencido y pasará el mensaje de la cola de mensajes no enviados a la cola de mensajes. Los mensajes transferidos a la cola de mensajes no enviados no se pueden reenviar automáticamente, se deben reconstruir.

Si necesita cifrado y no tiene ActiveDirectory, en esta entrada de blog , Sergey Sorokin detalla los pasos. necesario para cifrar la comunicación de MSMQ utilizando WCF sin Active Directory.

    
respondido por el Kyle Hodgson 18.07.2012 - 18:50
7

No son un reemplazo de 1 por 1: muchas veces usarás NServiceBus para enviar o recibir mensajes desde un punto final de WCF.

En cualquier caso, manejar situaciones de modo desconectado como este es donde las colas de mensajes realmente brillan. NServiceBus es un buen lugar para comenzar. Hay una serie de otras opciones por ahí. Notaré que muchos de ellos envuelven MSMQ al final del día. MSMQ es un back-end muy sólido y probablemente vale la pena usarlo cuando esté disponible.

    
respondido por el Wyatt Barnett 18.06.2012 - 16:06

Lea otras preguntas en las etiquetas