.net - postquerynotification - sql server query notification
¿Puede/debería usar SQL Server Service Broker con aplicaciones.NET? (3)
Para responder tu pregunta:
¿Puedo escuchar las colas de SQL Server Service Broker de las aplicaciones .NET que se ejecutan en una máquina diferente?
Sí.
Si es así, ¿debería hacerlo?
Si no, ¿qué recomendaría?
Puede considerar usar SqlDependency
. Utiliza Service Broker detrás de escena, pero no explícitamente.
Puede registrar un objeto SqlDependency
con una consulta SELECT
o un procedimiento almacenado. Si otro comando cambia los datos que se devolvieron de la consulta, se activará un evento. Puede registrar un controlador de eventos y ejecutar el código que desee en ese momento. O bien, puede usar SqlCacheDependency
, que solo eliminará el objeto asociado de la caché cuando se dispare el evento.
También puede utilizar Service Broker directamente. Sin embargo, en ese caso, deberá enviar y recibir sus propios mensajes, al igual que con MSMQ.
En entornos de carga equilibrada, SqlDependency
es bueno para los casos en los que el código debe ejecutarse en todos los servidores web (como vaciar el caché). Los mensajes de Service Broker son mejores para el código que solo deberían ejecutarse una vez, como enviar un correo electrónico.
En caso de que ayude, cubro ambos sistemas en detalle con ejemplos en mi libro ( Ultra-Fast ASP.NET ).
Tengo muchas operaciones en la base de datos que necesitan activar el código de la aplicación. Actualmente estoy utilizando el sondeo de la base de datos, pero escuché que SQL Server Service Broker me puede dar una funcionalidad similar a la de MSMQ.
- ¿Puedo escuchar las colas de SQL Server Service Broker de las aplicaciones .NET que se ejecutan en una máquina diferente?
- Si es así, ¿debería hacerlo?
- Si no, ¿qué recomendaría?
SSB (SQL Service Broker) tiene una función llamada Activation que permite adjuntar un procedimiento almacenado a una cola. SQL Server ejecutará este procedimiento internamente cuando haya mensajes para consumir en una cola. El procedimiento de cola adjunta puede ser un procedimiento CLR, que permite la ejecución de módulos de lógica de negocios de código administrado (C #, VB.Net etC).
Una alternativa a un procedimiento almacenado interno activado es tener un cliente externo ''escuchar'' en una cola con una WAITFOR(RECEIVE ... )
. Esta sintaxis es especial para SSB y hace un bloque no agrupado hasta que haya mensajes para recibir. Las aplicaciones luego consumen los mensajes recibidos como un conjunto de resultados T-SQL ordinario (como un SELECT). También hay una muestra de un activador externo para Service Broker que aprovecha el mecanismo de notificación de eventos para saber cuándo iniciar una aplicación para consumir mensajes de una cola.
Si desea ver una muestra de código T-SQL que aprovecha la activación interna de SSB, consulte la ejecución del procedimiento asíncrono .
Una biblioteca de colas fácil de usar para SQL Service Broker basada en colas de rinocerontes