Pregunta

Mi jefe de equipo me ha pedido que investigue MSMQ como una opción para la nueva versión de nuestro producto. Usamos SQL Service Broker en nuestra versión actual. He realizado una buena parte de la experimentación y la búsqueda en Google para encontrar qué producto es mejor para mis necesidades, pero pensé en pedir el mejor sitio que conozco para programar las respuestas.

Algunos detalles:

  • Nuestro cliente es .NET 1.1 y código 2.0; aquí es desde donde se enviará el mensaje.
  • El destino en una instancia de SQL Server 2005. Todos los mensajes terminan siendo actualizaciones o inserciones de la base de datos.
  • Enviaremos varias actualizaciones que deben tratarse como una transacción.
  • Tenemos que tener una perfecta capacidad de recuperación del mensaje; No se pueden perder mensajes.
  • Tenemos que ser asíncronos y poder aceptar mensajes incluso cuando el servidor SQL de destino está inactivo.
  • Desarrollar nuestra propia solución de colas no es una opción; Somos un equipo pequeño.

Cosas que he descubierto hasta ahora:

  • Tanto MSMQ como SQL Service Broker pueden hacer el trabajo.
  • Parece que Service Broker es más rápido para los mensajes transaccionales.
  • Service Broker requiere un servidor SQL que se ejecute en algún lugar, mientras que MSMQ necesita que cualquier máquina Windows configurada se ejecute en algún lugar.
  • MSMQ parece ser mejor / más rápido / más fácil de configurar / ejecutar en clústeres.

¿Me estoy perdiendo algo? ¿Hay un claro ganador aquí? Cualquier pensamiento, experiencias, o enlaces serían valorados. ¡Gracias!

EDITAR: Terminamos quedándonos con Service Broker porque tenemos un marco de base de datos personalizado utilizado en algunos de nuestros códigos de clientes (manejamos mejor las transacciones). Ese código capturó SQL para transacciones, pero no. El código del cliente también era la versión 1.1 de .NET, por lo que tendríamos que actualizar todo el código del cliente. ¡Gracias por tu ayuda!

¿Fue útil?

Solución

Habiendo migrado mi aplicación de Service Broker a MSMQ, tendría que votar por usar MSMQ. Hay varios factores a tener en cuenta, pero la mayoría tiene que ver con la forma en que utiliza sus datos y dónde vive el procesamiento.

  • ¿Si el procesamiento se realiza en la base de datos? Service Broker
  • ¿Si es sólo un movimiento de datos? Service Broker
  • ¿El procesamiento se realiza en código .NET / COM? MSMQ
  • ¿Necesita transacciones distribuidas remotas (por ejemplo, el procesamiento en una caja diferente a SQL)? MSMQ
  • ¿Necesita poder enviar mensajes mientras el destino está inactivo? MSMQ
  • ¿Desea utilizar nServiceBus, Massemployment, Rhino-ESB, etc.? MSMQ

Cosas a considerar, no importa lo que elijas

  • ¿Cómo sabes la salud de tu cola? Ambas opciones manejan la conmutación por error de manera diferente. Por ejemplo, Service Broker deshabilitará su cola en ciertos escenarios que pueden acabar con su aplicación.
  • ¿Cómo realizarás los informes? Si ya usa tablas SQL en sus informes, Service Broker puede integrarse fácilmente, ya que es solo otra tabla dinámica. Si ya está utilizando el Monitor de rendimiento, MSMQ puede encajar mejor. Service Broker tiene muchos contadores de rendimiento, así que no dejes que esto sea tu único factor.
  • ¿Cómo se mide el tiempo de actividad? ¿Se trata simplemente de asegurarse de no perder transacciones o necesita responder de manera sincrónica? Encuentro que la naturaleza distribuida de MSMQ permite un mayor tiempo de funcionamiento porque la cola principal puede desconectarse y no perder nada. Mientras que con Service Broker , su base de datos debe estar en línea o, de lo contrario, perderá.
  • ¿Ya tienes experiencia con alguna de estas tecnologías? Ambos tienen muchos detalles de implementación que pueden volverte y morderte.
  • Independientemente de la elección que tome, ¿qué tan fácil es cambiar la tecnología de colas subyacente? Recomiendo tener una interfaz IQueue genérica contra la que escriba una implementación concreta. De esta manera, la elección que realice se puede cambiar fácilmente más adelante si descubre que hizo la incorrecta. Después de todo, una cola es solo una cola y no debe bloquearlo en una implementación específica.

Otros consejos

He usado MSMQ antes y el único elemento que agregaría a su lista es una verificación de requisitos previos para el control de versiones. Me encontré con un problema en el que un sitio tenía Win 2000 Server y, por lo tanto, MSMQ v.2, en comparación con Win 2003 Server y MSMQ v3. Todo mi código .NET está dirigido a v.3 y no son compatibles ... o al menos no fácilmente.

Solo una consideración si sigues la ruta de MSMQ.

La limitación del tamaño del mensaje en MSMQ ha detenido mi búsqueda en esa dirección. Estoy aprendiendo Service Broker para el proyecto.

  

¿Necesita poder enviar mensajes mientras el destino está inactivo? MSMQ

No entiendo por qué? SSB puede enviar mensajes a destinos desconectados sin ningún problema. Todos estos mensajes se enviarán a la cola de transmisión y se enviarán cuando el destino esté al alcance.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top