Partager via


Conversations de dialogue

All messages sent by Service Broker are part of a conversation. A dialog is a conversation between two services. A dialog is a reliable, persistent bidirectional stream of messages between two services.

Les dialogues assurent la remise de messages EOIO (Exactly-Once In-Order Delivery). Ils utilisent l'identificateur de conversation et le numéro de séquence contenus dans chaque message pour identifier les messages apparentés et les livrer dans l'ordre correct. Un dialogue est un flux de messages permanent et sûr entre deux services.

Une conversation de dialogue sous-entend deux participants. The initiator starts the conversation. La cible accepte la conversation entamée par l'initiateur. Whether a participant starts the conversation determines the messages that the participant can send, as specified in the contract for the conversation. Le schéma suivant illustre le flux de messages d'un dialogue :

Flux de messages entre initiateur et cible

Les applications échangent des messages dans le cadre d'un dialogue. When SQL Server receives a message for a dialog, SQL Server puts the message in the queue for the dialog. L'application reçoit donc le message par le biais de la file d'attente et traite le message comme il se doit. As part of the processing, the application might send messages to the other participant in the dialog.

Remise fiable

Dialogs incorporate automatic message receipt acknowledgements to ensure reliable delivery. Service Broker saves each outgoing message in the transmission queue until the message is acknowledged by the remote service. Ces avis de réception automatiques économisent temps et ressources car la notification formelle d'arrivée de chaque message qui est effectuée par les applications n'est plus nécessaire. Chaque fois que cela est possible, les messages d'accusés de réception sont intégrés dans les messages de retour du dialogue.

ms166083.note(fr-fr,SQL.90).gifRemarque :
Service Broker handles acknowledgement messages internally. Ils n'apparaissent donc pas dans une file d'attente et ne sont pas remis à l'application concernée.

Service Broker does not consider it to be an error for a remote service to become unreachable. When a remote service is unreachable, Service Broker holds messages for that service until the service becomes reachable or the dialog lifetime expires.

Durée de vie du dialogue

Les applications peuvent échanger des messages le temps que dure le dialogue. The lifetime of a dialog lasts from the time that the local SQL Server instance creates the dialog until an application either explicitly ends the dialog or receives an error message associated with the dialog. Chaque participant doit conclure officiellement la conversation lorsque l'application reçoit un message signalant une erreur ou la fin de la conversation. Dans la plupart des services, un participant est chargé de signaler la fin d'une conversation réussie en achevant la conversation sans produire d'erreur. L'objet de la conversation détermine celui des deux participants, l'initiateur ou la cible, qui sera responsable de cette tâche.

The local Service Broker for an initiating application creates a conversation endpoint for the dialog when the application starts the dialog. The local Service Broker for a target application creates a conversation endpoint for the dialog when the instance receives the first message on the dialog.

Les dialogues peuvent également garantir que la durée de vie d'une conversation ne dépassera pas la limite spécifiée. Ainsi, l'application sollicitant le dialogue peut éventuellement indiquer une durée de vie maximale pour ce dialogue. Both the local Service Broker and the remote Service Broker keep track of this lifetime. When a dialog remains active at the maximum lifetime, each side of the conversation puts a time-out error message on the service queue and refuses new messages for the dialog. Conversations never live beyond the maximum lifetime that is established when the dialog starts. Notice that, while an application can still receive messages for the conversation after the conversation ends, no new messages can arrive for that conversation. The application cannot send messages about the conversation.

Applications are responsible for indicating when they are finished with a dialog by explicitly ending the dialog. Service Broker never ends a dialog automatically. celui-ci demeure dans la base de données jusqu'à ce que l'application mette explicitement un terme à la conversation. Ainsi, le dialogue peut dépasser la durée qui lui est impartie ou Service Broker signaler une erreur, chaque participant engagé dans la conversation doit publier officiellement l'instruction END CONVERSATION.

Minuteur de conversation

Un minuteur de conversation permet à une application de recevoir un message à un moment précis. When the conversation timer expires, SQL Server inserts a message for the conversation into the queue for the conversation, at the endpoint that started the conversation timer. L'utilisation d'un minuteur de conversation par une application est infinie : il sert habituellement à répondre aux retards des réponses provenant du service distant. Une autre utilisation courante consiste à créer un service qui envoie des messages à intervalles réguliers au service distant. For example, a service might use a conversation timer to report on the current state of SQL Server every few minutes. Des applications peuvent également utiliser ce minuteur pour une procédure stockée à un moment donné. This allows Service Broker to support scheduled activities.

Chaque participant engagé dans une conversation peut définir un minuteur par conversation. Le minuteur n'est pas partagé avec l'autre participant, il ne présente aucune incidence sur la durée de vie de la conversation. Instead, when the timer expires, the local Service Broker adds a time-out message to the queue for the local service. A time-out message has the type name https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer

Voir aussi

Concepts

Messages Service Broker

Autres ressources

BEGIN DIALOG CONVERSATION (Transact-SQL)
BEGIN CONVERSATION TIMER (Transact-SQL)
END CONVERSATION (Transact-SQL)
SEND (Transact-SQL)
RECEIVE (Transact-SQL)
sys.transmission_queue (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005