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.
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:
Instrucciones de lenguaje de definición de datos (DDL) (Transact-SQL) para las instrucciones CREATE, ALTER y DROP
Vistas de administración dinámica relacionadas con Service Broker (Transact-SQL)
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.