Service BrokerService Broker

S’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) OuiAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed InstanceS’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) OuiAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance

SQL ServerSQL Server Service BrokerService Broker fournit une prise en charge native de la messagerie et de la mise en file d’attente dans le Moteur de base de données SQL ServerSQL Server Database Engine et Azure SQL Managed Instance.Service BrokerService Broker provide native support for messaging and queuing in the Moteur de base de données SQL ServerSQL Server Database Engine and Azure SQL Managed Instance. Les développeurs peuvent créer plus facilement des applications perfectionnées qui utilisent les composants de Moteur de base de donnéesDatabase Engine pour la communication entre des bases de données disparates, et créer des applications fiables et distribuées.Developers can easily create sophisticated applications that use the Moteur de base de donnéesDatabase Engine components to communicate between disparate databases, and build distributed and reliable applications.

Quand utiliser Service Broker ?When to use Service Broker

Utilisez les composants de Service Broker pour implémenter des fonctionnalités natives de traitement des messages asynchrones dans la base de données.Use Service Broker components to implement native in-database asynchronous message processing functionalities. Les développeurs d'applications qui utilisent Service BrokerService Broker peuvent distribuer les charges de données sur plusieurs bases de données sans développer des mécanismes de messagerie et de communication complexes.Application developers who use Service BrokerService Broker can distribute data workloads across several databases without programming complex communication and messaging internals. Service Broker réduit le travail de développement et de test car Service BrokerService Broker gère les chemins de communication dans le contexte d’une conversation.Service Broker reduces development and test work because Service BrokerService Broker handles the communication paths in the context of a conversation. Les performances sont aussi meilleures.It also improves performance. Par exemple, les bases de données frontales prenant en charge les sites Web peuvent enregistrer des informations et mettre des tâches intensives en file d'attente dans des bases de données principales.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 garantit que toutes les tâches sont gérées dans le contexte des transactions afin d’assurer une fiabilité et une cohérence techniques.ensures that all tasks are managed in the context of transactions to assure reliability and technical consistency.

Vue d’ensembleOverview

Service Broker est un framework de remise de message qui vous permet de créer des applications natives orientées service dans la base de données.Service Broker is a message delivery framework that enables you to create native in-database service-oriented applications. Contrairement aux fonctionnalités de traitement des requêtes classiques qui lisent constamment les données à partir des tables et les traitent au cours du cycle de vie de requête, dans une application orientée service vous avez des services de base de données qui échangent des messages.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. Chaque service dispose d’une file d’attente où les messages sont placés jusqu’à ce qu’ils soient traités.Every service has a queue where the messages are placed until they are processed.

Service Broker

Les messages dans les files d’attente peuvent être extraits à l’aide de la commande Transact-SQL RECEIVE ou par la procédure d’activation qui est appelée chaque fois que le message arrive dans la file d’attente.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.

Création de servicesCreating services

La création des services de base de données s’effectue à l’aide de l’instruction Transact-SQL CREATE SERVICE.Database services are created by using the CREATE SERVICE Transact SQL statement. Le service peut être associée à la file d’attente de message créée à l’aide de l’instruction 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; 

Envoi de messagesSending messages

Les messages sont envoyés sur la conversation entre les services à l’aide de l’instruction Transact-SQL SEND.Messages are sent on the conversation between the services using the SEND Transact-SQL statement. Une conversation est un canal de communication établi entre les services à l’aide de l’instruction Transact-SQL BEGIN DIALOG.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) ;  

Le message est envoyé vers ExpenssesService et placé dans dbo.ExpenseQueue.The message will be sent to the ExpenssesService and placed in dbo.ExpenseQueue. Comme aucune procédure d’activation n’est associée à cette file d’attente, le message reste dans la file d’attente jusqu’à ce qu’un utilisateur le lise.Because there is no activation procedure associated to this queue, the message will remain in the queue until someone reads it.

Traitement des messagesProcessing messages

Les messages placés dans la file d’attente peuvent être sélectionnés à l’aide d’une requête SELECT standard.The messages that are placed in the queue can be selected by using a standard SELECT query. L’instruction SELECT ne modifie pas la file d’attente et ne supprime pas les messages.The SELECT statement will not modify the queue and remove the messages. Pour lire et extraire les messages de la file d’attente, vous pouvez utiliser l’instruction Transact-SQL RECEIVE.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; 

Une fois que vous avez traité tous les messages de la file d’attente, vous devez fermer la conversation à l’aide de l’instruction Transact-SQL END CONVERSATION.Once you process all messages from the queue, you should close the conversation using the END CONVERSATION Transact-SQL statement.

Emplacement de la documentation de Service BrokerWhere is the documentation for Service Broker?

La documentation de référence pour Service BrokerService Broker est incluse dans la documentation de SQL Server 2019 (15.x)SQL Server 2019 (15.x) .The reference documentation for Service BrokerService Broker is included in the SQL Server 2019 (15.x)SQL Server 2019 (15.x) documentation. Cette documentation de référence comprend les sections suivantes :This reference documentation includes the following sections:

Consultez la documentation précédemment publiée pour les concepts Service BrokerService Broker et pour les tâches de gestion et de développement.See the previously published documentation for Service BrokerService Broker concepts and for development and management tasks. Cette documentation n'est pas reproduite dans la documentation de SQL Server 2019 (15.x)SQL Server 2019 (15.x) en raison de quelques modifications apportées dans Service BrokerService Broker dans SQL Server 2019 (15.x)SQL Server 2019 (15.x).This documentation is not reproduced in the SQL Server 2019 (15.x)SQL Server 2019 (15.x) documentation due to the small number of changes in Service BrokerService Broker in SQL Server 2019 (15.x)SQL Server 2019 (15.x).

Nouveautés dans Service BrokerWhat's new in Service Broker

Aucune modification importante n'a été introduite dans SQL Server 2019 (15.x)SQL Server 2019 (15.x).No significant changes are introduced in SQL Server 2019 (15.x)SQL Server 2019 (15.x). Les modifications suivantes ont été introduites dans 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 et Azure SQL Managed InstanceService broker and Azure SQL Managed Instance

  • Service Broker entre instances n’est pas pris en charge.Cross-instance service broker is not supported
  • sys.routes – Prérequis : sélectionnez l’adresse à partir de sys.routes.sys.routes - Prerequisite: select address from sys.routes. L’adresse doit être LOCAL sur tous les itinéraires.Address must be LOCAL on every route. Voir sys.routes.See sys.routes.
  • CREATE ROUTE - vous ne pouvez pas utiliser CREATE ROUTE avec ADDRESS si la valeur de celle-ci est différente de LOCAL.CREATE ROUTE - you cannot use CREATE ROUTE with ADDRESS other than LOCAL. Voir CREATE ROUTE.See CREATE ROUTE.
  • ALTER ROUTEALTER ROUTE n’est pas utilisable avec ADDRESS autre que LOCAL.ALTER ROUTE cannot use ALTER ROUTE with ADDRESS other than LOCAL. Voir ALTER ROUTE.See ALTER ROUTE.

Les messages peuvent être envoyés à des services cibles (multidiffusion).Messages can be sent to multiple target services (multicast)

La syntaxe de l’instruction SEND (Transact-SQL) a été étendue pour permettre la multidiffusion au moyen de la prise en charge de plusieurs descripteurs de conversation.The syntax of the SEND (Transact-SQL) statement has been extended to enable multicast by supporting multiple conversation handles.

Les files d'attente exposent le temps d'empilement des messages.Queues expose the message enqueued time

Les files d’attente ont une nouvelle colonne, message_enqueue_time, qui indique depuis combien de temps un message est dans la file d’attente.Queues have a new column, message_enqueue_time, that shows how long a message has been in the queue.

La gestion des messages incohérents peut être désactivéePoison message handling can be disabled

Les instructions CREATE QUEUE (Transact-SQL) et ALTER QUEUE (Transact-SQL) ont désormais la possibilité d’activer ou désactiver la gestion des messages incohérents en ajoutant la clause 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). L’affichage catalogue sys.service_queues comprend maintenant la colonne is_poison_message_handling_enabled pour indiquer si le message incohérent est activé ou désactivé.The catalog view sys.service_queues now has the column is_poison_message_handling_enabled to indicate whether poison message is enabled or disabled.

Prise en charge d’Always On dans Service BrokerAlways On support in Service Broker

Pour plus d’informations, consultez Service Broker avec les groupes de disponibilité Always On (SQL Server).For more information, see Service Broker with Always On Availability Groups (SQL Server).

Étapes suivantesNext steps

L’utilisation la plus courante de Service Broker concerne les notifications d’événements.The most common use of Service Broker is for event notifications. Découvrez comment Implémenter des notifications d'événements, Configurer la sécurité du dialogue ou Obtenir plus d’informations.Learn how to implement event notifications, configure dialog security, or get more information.