Service BrokerService Broker

SE APLICA A: síSQL Server síAzure SQL Database (solo Instancia administrada) noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database (Managed Instance only) noAzure SQL Data Warehouse noParallel Data Warehouse

SQL ServerSQL Server Service BrokerService Broker proporcionan compatibilidad nativa con mensajería y puesta en cola en Motor de base de datos de SQL ServerSQL Server Database Engine e Instancia administrada de Azure SQL Database.Service BrokerService Broker provide native support for messaging and queuing in the Motor de base de datos de SQL ServerSQL Server Database Engine and Azure SQL Database Managed Instance. Los desarrolladores pueden crear fácilmente aplicaciones complejas que usan los componentes de Motor de base de datosDatabase Engine para comunicarse entre distintas bases de datos y compilar aplicaciones distribuidas y confiables.Developers can easily create sophisticated applications that use the Motor de base de datosDatabase Engine components to communicate between disparate databases, and build distributed and reliable applications.

Cuándo utilizar Service BrokerWhen to use Service Broker

Utilice componentes de Service Broker para implementar funcionalidades nativas de procesamiento de mensajes asincrónicos en bases de datos.Use Service Broker components to implement native in-database asynchronous message processing functionalities. Los desarrolladores de aplicaciones que usan Service BrokerService 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.Application developers who use Service BrokerService Broker can distribute data workloads across several databases without programming complex communication and messaging internals. Service Broker reduce el trabajo de desarrollo y realización de pruebas, ya que Service BrokerService Broker controla las vías de comunicación del contexto de una conversación.Service Broker reduces development and test work because Service BrokerService Broker handles the communication paths in the context of a conversation. También aumenta el rendimiento.It also improves performance. 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.For example, front-end databases supporting Web sites can record information and send process intensive tasks to queue in back-end databases. Service BrokerService Broker asegura que todas las tareas se administran en el contexto de transacciones para garantizar confiabilidad y coherencia técnica.ensures that all tasks are managed in the context of transactions to assure reliability and technical consistency.

Información generalOverview

Service Broker es un marco de trabajo de entrega de mensajes que le permite crear aplicaciones nativas orientadas a servicios en bases de datos.Service Broker is a message delivery framework that enables you to create native in-database service-oriented applications. 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.Unlike classic query processing functionalities that constantly read data from the tables and process them during the query lifecycle, in service-oriented application you have database services that are exchanging the messages. Cada servicio tiene una cola en la que se colocan los mensajes hasta que se procesan.Every service has a queue where the messages are placed until they are processed.

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.The messages in the queues can be fetched using the Transact-SQL RECEIVE command or by the activation procedure that will be called whenever the message arrives in the queue.

Creación de serviciosCreating services

Los servicios de base de datos se crean mediante la instrucción CREATE SERVICE de Transact-SQL.Database services are created by using the CREATE SERVICE Transact SQL statement. El servicio puede asociarse a la cola de mensajes creada mediante la instrucción CREATE QUEUE:Service can be associated with the message queue create by using the CREATE QUEUE statement:

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

Envío de mensajesSending messages

Los mensajes se envían en la conversación entre los servicios con la instrucción SEND de Transact-SQL.Messages are sent on the conversation between the services using the SEND Transact-SQL statement. Una conversación es un canal de comunicación que se establece entre los servicios con la instrucción BEGIN DIALOG de Transact-SQL.A conversation is a communication channel that is established between the services using the BEGIN DIALOG Transact-SQL statement.

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.The message will be sent to the ExpenssesService and placed in 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.Because there is no activation procedure associated to this queue, the message will remain in the queue until someone reads it.

Procesar mensajesProcessing messages

Los mensajes que están colocados en la cola se pueden seleccionar mediante una consulta SELECT estándar.The messages that are placed in the queue can be selected by using a standard SELECT query. La instrucción SELECT no modificará la cola y quitará los mensajes.The SELECT statement will not modify the queue and remove the messages. Para leer y extraer los mensajes de la cola, puede usar la instrucción RECEIVE de Transact-SQL.To read and pull the messages from the queue, you can use the RECEIVE Transact-SQL statement.

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.Once you process all messages from the queue, you should close the conversation using the END CONVERSATION Transact-SQL statement.

¿Dónde está la documentación de Service Broker?Where is the documentation for Service Broker?

La documentación de referencia para Service BrokerService Broker se incluye en la documentación de SQL Server 2017SQL Server 2017 .The reference documentation for Service BrokerService Broker is included in the SQL Server 2017SQL Server 2017 documentation. Esta documentación de referencia incluye las secciones siguientes:This reference documentation includes the following sections:

Vea la documentación publicada previamente para conocer los conceptos de Service BrokerService Broker y las tareas de desarrollo y administración.See the previously published documentation for Service BrokerService Broker concepts and for development and management tasks. Esta documentación no se reproduce en la documentación de SQL Server 2017SQL Server 2017 debido al pequeño número de cambios realizados en Service BrokerService Broker en SQL Server 2017SQL Server 2017.This documentation is not reproduced in the SQL Server 2017SQL Server 2017 documentation due to the small number of changes in Service BrokerService Broker in SQL Server 2017SQL Server 2017.

Novedades de Service BrokerWhat's new in Service Broker

En SQL Server 2017SQL Server 2017no se introducen cambios significativos.No significant changes are introduced in SQL Server 2017SQL Server 2017. Los siguientes cambios se incluyeron por primera vez en SQL Server 2012 (11.x)SQL Server 2012 (11.x).The following changes were introduced in SQL Server 2012 (11.x)SQL Server 2012 (11.x).

Service Broker e Instancia administrada de Azure SQL DatabaseService broker and Azure SQL Database Managed Instance

  • No se admite la opción de Service Broker entre instanciasCross-instance service broker is not supported
  • sys.routes -Requisito previo: seleccione la dirección desde sys.routes.sys.routes - Prerequisite: select address from sys.routes. La dirección debe ser LOCAL en todas las rutas.Address must be LOCAL on every route. Consulte sys.routes.See sys.routes.
  • CREATE ROUTE -no puede usar CREATE ROUTE con ADDRESS que no sea LOCAL.CREATE ROUTE - you cannot use CREATE ROUTE with ADDRESS other than LOCAL. Consulte CREATE ROUTE.See CREATE ROUTE.
  • ALTER ROUTE no se puede usar ALTER ROUTE con ADDRESS que no sea LOCAL.ALTER ROUTE cannot use ALTER ROUTE with ADDRESS other than LOCAL. Consulte ALTER ROUTE.See ALTER ROUTE.

Se pueden enviar mensajes a varios servicios de destino (multidifusión)Messages can be sent to multiple target services (multicast)

La sintaxis de la instrucción de SEND (Transact-SQL) se ha ampliado para habilitar la multidifusión admitiendo varios identificadores de conversación.The syntax of the SEND (Transact-SQL) statement has been extended to enable multicast by supporting multiple conversation handles.

Las colas exponen la hora de puesta en cola del mensajeQueues expose the message enqueued time

Las colas tienen una nueva columna, message_enqueue_time, que muestra el tiempo que un mensaje ha estado en la cola.Queues have a new column, message_enqueue_time, that shows how long a message has been in the queue.

El control de mensajes dudosos se puede deshabilitarPoison message handling can be disabled

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).The CREATE QUEUE (Transact-SQL) and ALTER QUEUE (Transact-SQL) statements now have the ability to enable or disable poison message handling by adding the clause, 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.The catalog view sys.service_queues now has the column is_poison_message_handling_enabled to indicate whether poison message is enabled or disabled.

Compatibilidad con AlwaysOn de Service BrokerAlways On support in Service Broker

Para más información, vea Service Broker con grupos de disponibilidad AlwaysOn (SQL Server).For more information, see Service Broker with Always On Availability Groups (SQL Server).