Compartir a través de


Service Broker

Se aplica a: SQL Server Azure SQL Managed Instance

SQL Server Service Broker proporciona compatibilidad nativa con la mensajería y la puesta en cola de Motor de base de datos de SQL Server y Azure SQL Managed Instance. Los desarrolladores pueden crear fácilmente aplicaciones complejas que usan los componentes de Motor de base de datos para comunicarse entre distintas bases de datos y compilar aplicaciones distribuidas y confiables.

Cuándo utilizar Service Broker

Utilice componentes de Service Broker para implementar funcionalidades nativas de procesamiento de mensajes asincrónicos en bases de datos. Los desarrolladores de aplicaciones que usan Service Broker pueden distribuir las cargas de trabajo de datos en varias bases de datos sin tener que programar complejas funciones internas de comunicación y mensajería. Service Broker reduce el trabajo de desarrollo y realización de pruebas, ya que Service Broker controla las vías de comunicación del contexto de una conversación. También aumenta el rendimiento. Por ejemplo, las bases de datos front-end que admiten sitios web pueden grabar información y enviar tareas con muchos procesos a colas de bases de datos back-end. Service Broker asegura que todas las tareas se administran en el contexto de transacciones para garantizar confiabilidad y coherencia técnica.

Información general

Service Broker es un marco de trabajo de entrega de mensajes que le permite crear aplicaciones nativas orientadas a servicios en bases de datos. A diferencia de las funcionalidades clásicas de procesamiento de consultas que leen constantemente los datos de las tablas y los procesan durante el ciclo de vida de la consulta, en las aplicaciones orientadas a servicios se tienen servicios de base de datos que intercambian los mensajes. Cada servicio tiene una cola en la que se colocan los mensajes hasta que se procesan.

Service Broker

Los mensajes de las colas se pueden capturar con el comando RECEIVE de Transact-SQL o mediante el procedimiento de activación que se llamará cada vez que el mensaje llegue a la cola.

Creación de servicios

Los servicios de base de datos se crean mediante la instrucción CREATE SERVICE de Transact-SQL. El servicio puede asociarse a la cola de mensajes creada mediante la instrucción CREATE QUEUE:

CREATE QUEUE dbo.ExpenseQueue;
GO
CREATE SERVICE ExpensesService
    ON QUEUE dbo.ExpenseQueue; 

Envío de mensajes

Los mensajes se envían en la conversación entre los servicios con la instrucción SEND de Transact-SQL. Una conversación es un canal de comunicación que se establece entre los servicios con la instrucción BEGIN DIALOG de Transact-SQL.

DECLARE @dialog_handle UNIQUEIDENTIFIER;

BEGIN DIALOG @dialog_handle  
FROM SERVICE ExpensesClient  
TO SERVICE 'ExpensesService';  
  
SEND ON CONVERSATION @dialog_handle (@Message) ;  

El mensaje se enviará a la ExpenssesService y se colocará en dbo.ExpenseQueue. Dado que no hay ningún procedimiento de activación asociado a esta cola, el mensaje permanecerá en la cola hasta que alguien lo lea.

Procesar mensajes

Los mensajes que están colocados en la cola se pueden seleccionar mediante una consulta SELECT estándar. La instrucción SELECT no modificará la cola y quitará los mensajes. Para leer y extraer los mensajes de la cola, puede usar la instrucción RECEIVE de Transact-SQL.

RECEIVE conversation_handle, message_type_name, message_body  
FROM ExpenseQueue; 

Una vez que procesa todos los mensajes de la cola, debe cerrar la conversación con la instrucción END CONVERSATION de Transact-SQL.

¿Dónde está la documentación de Service Broker?

La documentación de referencia para Service Broker se incluye en la documentación de SQL Server . Esta documentación de referencia incluye las secciones siguientes:

Vea la documentación publicada previamente para conocer los conceptos de Service Broker y las tareas de desarrollo y administración. Esta documentación no se reproduce en la de SQL Server porque el número de cambios realizados en Service Broker, en las versiones recientes de SQL Server, es reducido.

Novedades de Service Broker

Service Broker y Azure SQL Managed Instance

El intercambio de mensajes entre instancias de Service Broker entre instancias de Azure SQL Managed Instance y el intercambio de mensajes entre SQL Server y Azure SQL Manage Instance se encuentra actualmente en versión preliminar pública:

  • CREATE ROUTE: El puerto especificado debe ser el 4022. Consulte CREATE ROUTE.
  • ALTER ROUTE: El puerto especificado debe ser el 4022. Consulte ALTER ROUTE.

Se admite la seguridad de transporte, pero no la seguridad de diálogo:

  • No se admite CREATE REMOTE SERVICE BINDING.

Service Broker está habilitado de forma predeterminada y no se puede deshabilitar. No se admiten las siguientes opciones de ALTER DATABASE:

  • ENABLE_BROKER
  • DISABLE_BROKER

En SQL Server 2019 (15.x), no se introduce ningún cambio significativo. Los siguientes cambios se incluyeron por primera vez en SQL Server 2012 (11.x).

Se pueden enviar mensajes a varios servicios de destino (multidifusión)

La sintaxis de la instrucción de SEND (Transact-SQL) se ha ampliado para habilitar la multidifusión admitiendo varios identificadores de conversación.

Las colas exponen la hora de puesta en cola del mensaje

Las colas tienen una nueva columna, message_enqueue_time, que muestra el tiempo que un mensaje ha estado en la cola.

El control de mensajes dudosos se puede deshabilitar

Las instrucciones CREATE QUEUE (Transact-SQL) y ALTER QUEUE (Transact-SQL) ahora pueden habilitar o deshabilitar el control de mensajes dudosos agregando la cláusula POISON_MESSAGE_HANDLING (STATUS = ON | OFF). La vista de catálogo sys.service_queues tiene ahora la columna is_poison_message_handling_enabled para indicar si el control de mensajes dudosos está habilitado o deshabilitado.

Compatibilidad con AlwaysOn de Service Broker

Para más información, vea Service Broker con grupos de disponibilidad AlwaysOn (SQL Server).

Pasos siguientes

El uso más común de Service Broker es para las notificaciones de eventos. Aprenda a implementar notificaciones de eventos o configurar seguridad de diálogo, o bien obtenga más información.