sql >> Base de Datos >  >> RDS >> Sqlserver

Cola en mensajes OneWay WCF usando Windows Service y SQL Server

Soy un DBA, por lo que da sabor a mi respuesta, pero esto es lo que haría:

  1. Si usa SQL 2005+, use Service Broker para almacenar los mensajes en la base de datos en lugar de almacenarlos en una tabla. Obtiene un mecanismo de cola con esto, por lo que puede deshacerse de MSMQ. También tendrá una tabla, pero solo almacenará el identificador de la conversación (esencialmente, un puntero al mensaje) junto con cuántas veces intentó este mensaje. Por último, querrá algún tipo de "buzón de mensajes fallidos" donde vayan los mensajes que alcanzan su umbral de reintento.
  2. En su código de procesamiento de mensajes, haga lo siguiente:
    • Comenzar una transacción
    • Recibir un mensaje fuera de la cola
    • Si el recuento de reintentos es mayor que el umbral, muévalo al cuadro de mensajes fallidos y confirme
    • Incrementar el contador en la mesa para este mensaje
    • Procesar el mensaje
    • Si el procesamiento tuvo éxito, confirme la transacción
    • Si el procesamiento falla, coloque un nuevo mensaje en la cola con el mismo contenido y luego confirme la transacción

Tenga en cuenta que no hay reversiones planificadas. Las reversiones en Service Broker pueden ser malas; si revierte 5 veces sin una recepción exitosa, la cola se desactivará tanto para poner como para quitar de la cola. Pero aún desea tener transacciones para el caso en que su procesador de mensajes muere en medio del procesamiento (es decir, el servidor falla).