El líder de mi 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 hecho mi parte justa de la experimentación y Google para encontrar el producto que mejor se adapta a mis necesidades, pero pensé que podría pedir el mejor sitio que conozco para programar las respuestas.¿Debo usar MSMQ o SQL Service Broker para las transacciones?
Algunos detalles:
- Nuestro cliente es .NET 1.1 y 2.0 de código; aquí es de donde se enviará el mensaje.
- El destino en una instancia de SQL Server 2005. Todos los mensajes terminan siendo actualizaciones de bases de datos o inserciones.
- Enviaremos varias actualizaciones que deben tratarse como una transacción.
- Tenemos que tener una capacidad de recuperación de mensajes perfecta; no se pueden perder mensajes
- Tenemos que ser asincrónicos y capaces de aceptar mensajes incluso cuando el servidor SQL de destino no funciona.
- 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 y SQL Service Broker pueden hacer el trabajo.
- Parece que el intermediario de servicios es más rápido para los mensajes transaccionales.
- Service Broker requiere que un servidor SQL se ejecute en alguna parte, mientras que MSMQ necesita que cualquier máquina Windows configurada se ejecute en alguna parte.
- MSMQ parece ser mejor/más rápido/más fácil de configurar/ejecutar en clústeres.
¿E-cando extraño? ¿Hay un ganador claro aquí? Cualquier pensamiento, experiencia o enlace sería valorado. ¡Gracias!
EDIT: Terminamos quedándonos con el agente de servicios porque tenemos un marco de base de datos personalizado utilizado en algunos de nuestros códigos de cliente (manejamos mejor las transacciones). Ese código capturó SQL para las transacciones, pero no. El código del cliente también era toda la versión 1.1 de .NET, por lo que tendríamos que actualizar todo el código del cliente. ¡Gracias por tu ayuda!
Si su código de cliente se ejecuta en una máquina que no sea el servidor de la base de datos, asegúrese de probar el escenario de reversión. Me encontré con problemas en los que cuando procesaba la cola y necesitaba fallar algo debido a que el punto final remoto estaba inactivo, terminaba por retirar la cola en el intermediario de servicios porque solo puede manejar 5 fallas antes de que se desconecte. Para evitar esto tuve que deshabilitar transacciones para Service Broker y confiar en el manejo de excepciones en el código, lo que significa que bajo ciertas fallas perdería completamente el mensaje. –
¿Cuál fue la elección final? Eso es si no es demasiado tarde para preguntar :). –
@the coon: Terminamos usando SQL Service Broker, y funcionó bien (como mencioné en la edición anterior).Fue la mejor opción para nosotros en ese momento, aunque creo que (entre estos dos) usaría MSMQ si fuera a reconstruir el sistema desde cero. –