2009-09-21 29 views
19

Tengo muchas operaciones en la base de datos que necesitan desencadenar código de aplicación. Actualmente estoy usando el sondeo de la base de datos, pero escuché que SQL Server Service Broker puede darme la funcionalidad similar a MSMQ.¿Puede/debería usar SQL Server Service Broker con aplicaciones .NET?

  1. ¿Puedo escuchar las colas de SQL Server Service Broker desde aplicaciones .NET que se ejecutan en una máquina diferente?
  2. Si es así, ¿debería hacerlo?
  3. Si no, ¿qué recomendarías?
+0

Claro, yo lo hago todo el tiempo. – RBarryYoung

+0

¿Por qué no marca una respuesta si fue de ayuda, o pone una recompensa si quiere más respuestas? (desde que tiene casi 5 años, probablemente ya no tenga problemas ...) – Noctis

Respuesta

11

para responder a sus preguntas:

¿Puedo escuchar SQL Server Service Broker colas de aplicaciones .NET que se ejecutan en una máquina diferente?

Sí.

Si es así, ¿debería hacerlo?

Si no, ¿qué recomendarías?

Considerar el uso de 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 simplemente eliminará el objeto asociado de la memoria caché cuando se desate el evento.

También puede usar Service Broker directamente. Sin embargo, en ese caso, deberá enviar y recibir sus propios mensajes, como con MSMQ.

En entornos de equilibrio de carga, SqlDependency es bueno para los casos en que el código debe ejecutarse en cada servidor web (como el lavado de la memoria 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).

+2

Acabo de comprar su libro, ya que se ve bastante bien. Además, apoyo a otros usuarios de StackOverflow. –

+0

Gracias. Espero que lo disfruten; por favor dejame saber lo que tu piensas. – RickNZ

17

SSB (SQL Service Broker) tiene una característica llamada Activation que habilitó un procedimiento almacenado para asociarse a una cola. SQL Server ejecutará este procedimiento internamente cuando haya mensajes para consumir en una cola. El procedimiento adjunto en cola puede ser un procedimiento CLR, que permite la ejecución de módulos lógicos comerciales de código administrado (C#, VB.Net etC).

Una alternativa a un procedimiento almacenado activado interno es hacer que un cliente externo 'escuche' en una cola con una instrucción WAITFOR(RECEIVE ...). Esta sintaxis es especial para SSB y hace un bloque sin agrupar hasta que haya mensajes para recibir. Las aplicaciones luego consumen los mensajes recibidos como un conjunto de resultados ordinarios de T-SQL (como un SELECCIONAR). También hay una muestra de External Activator for 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 del código T-SQL que aprovecha la activación interna de SSB, eche un vistazo a Asynchronous procedure execution.

+0

Realmente estoy buscando su idoneidad para enviar mensajes a aplicaciones externas que se ejecutan en máquinas separadas de la base de datos. –

+0

SSB solo puede enviar mensajes a una instancia de SQL. Puede usar el uso de ediciones SQL Express para cada máquina por separado. –

+0

Sé que es 8 años más tarde, pero el comentario anterior no es cierto. Service Broker funcionará solo con lectores de cola externos. Incluso funciona bien con TPL y EF. –

Cuestiones relacionadas