Mover mensajes entre colas de MSMQ

Trabanjando con MSMQ a menudo nos encontramos con escenarios en los que necesitamos mover todos los mensajes de una cola de MSMQ a otra. Por ejemplo yo me he encontrado con la necesidad de mover los mensajes desde una cola de mensajes ‘poison’ a la cola a la que estaban destinados originalmente para que sean reprocesados.


Existe una manera obvia de mover todos los mensajes de una cola a otra, enumerarlos y volverlos a enviar a la cola original. Pero existe otra manera mucho más eficiente (según las pruebas sencillas que he podido hacer) y menos conocida: utilizar la interfaz IMessageMover de la COM+ Service Type Library, en concreto su método MoveMessages, que mueve todos los mensajes de una cola a otra, además lo hace de manera transaccional si las colas son transaccionales.


Para usar esta interfaz basta con añadir una referncia a la librería COM+ Service Type Library.


image


Como esta interfaz es olecompatible, tal y como podemos observar con Oleview (imagen siguiente), .Net la puede utilizar sin ningún problema, de manera totalmente transpararente.


image 


Os dejo un poco de código de ejemplo que muestra lo simple que es realizar el movimiento de los mensajes entre colas:



  using COMSVCSLib;


 


  …


 


  IMessageMover messageMover = new MessageMover();


  messageMover.SourcePath = @».PRIVATE$ColaOrigen»;


  messageMover.DestPath = @».PRIVATE$ColaDestino»;


  messageMover.MoveMessages();


 


  …


 


¡Espero que os resulte útil!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *