Rétention des messages

S’applique à :SQL ServerAzure SQL Managed Instance

Lorsqu’une file d’attente spécifie la rétention des messages, Service Broker ne supprime pas les messages de la file d’attente tant que la conversation ne se termine pas. Qui plus est, Service Broker copie également les messages sortants dans la file d'attente. Le service peut ainsi conserver un enregistrement précis des messages entrants et sortants.

La rétention des messages vous permet de disposer d'un enregistrement exact d'une conversation pour une file d'attente alors que la conversation est active. Pour les applications qui nécessitent des données d'audit détaillées ou qui doivent effectuer des transactions de compensation lorsque la conversation échoue, la rétention des messages peut être plus pratique que la copie de chaque message dans une table d'état pendant que la conversation est active.

La conservation des messages augmente le nombre de messages dans la file d’attente des conversations actives et augmente la quantité de travail que SQL Server effectue pour envoyer un message. Par conséquent, la rétention des messages diminue les performances. L'incidence précise sur les performances dépend des modèles de communication des services qui utilisent la file d'attente. En général, vous devez utiliser la rétention des messages chaque fois que cette option est indispensable au bon fonctionnement d'une application. Si l’application ne nécessite pas d’enregistrement exact de tous les messages envoyés et reçus pendant que la conversation est active, la maintenance de l’état dans une table d’état peut améliorer les performances. Rappelez-vous également que lorsque la conversation se termine, les messages conservés sont supprimés de la file d’attente. Par conséquent, si vous utilisez la rétention à des fins d’audit, vous devez être sûr de copier les messages dans un stockage permanent avant de terminer la conversation.

Notes

Le recours à la rétention des messages peut engendrer une diminution des performances. Vous devez utiliser ce paramètre uniquement si le contrat de niveau de service d’application exige que l’application conserve les messages exacts envoyés et reçus. Les messages d’une file d’attente qui sont prêts à être reçus ont l’état 1. L’instruction RECEIVE retourne des messages qui affichent l’état 1. Une fois que l’instruction RECEIVE retourne un message, elle définit l’état sur 0 et laisse le message dans la file d’attente si la rétention du message est activée. Si la rétention des messages est désactivée, l’instruction RECEIVE supprime le message de la file d’attente. Les services qui utilisent la file d'attente enregistrent à la fois les messages entrants et les messages sortants. Dans ce cas, la SEND commande copie les messages dans la file d’attente du service (avec un status de 3) et ajoute le message à la file d’attente de transmission. Lorsque la conversation se termine, la file d'attente supprime tous les messages de la conversation.

Une application ne peut pas recevoir le même message deux fois et une application ne peut pas recevoir un message ajouté à la file d’attente en tant que message sortant. Pour utiliser des messages conservés, utilisez une SELECT instruction pour interroger la file d’attente. Pour les opérations d'audit, une application insère les messages conservés dans une table d'audit avant de mettre fin à la conversation. En règle générale, pour les transactions de compensation, une application reprend tous les messages traités en suivant l'ordre inverse du traitement, et elle annule l'opération effectuée pour chaque message, jusqu'à ce que tous les messages aient été traités.

Pour plus d’informations sur l’utilisation SELECT d’instructions pour accéder à une file d’attente, consultez Files d’attente de requêtes.