Partager via


Traitement transactionnel des messages

Mise à jour : novembre 2007

Le traitement transactionnel vous permet de vous assurer que les messages d'une transaction sont remis dans l'ordre, ne sont remis qu'une seule fois et sont récupérés avec succès de la file d'attente de destination. Le composant MessageQueue permet d'envoyer et de recevoir des messages de manière transactionnelle. Lorsque vous envoyez des messages à l'intérieur d'une transaction, vous regroupez en réalité un ensemble de messages connexes. Soit tous les messages contenus dans la transaction sont remis ensemble en suivant l'ordre dans lequel ils ont été envoyés (transaction validée), soit ils ne sont ni envoyés, ni reçus du tout si un problème quelconque survient (transaction abandonnée).

Les principaux types de transactions que vous permettent de créer vos applications sont au nombre de deux :

  • Les transactions internes sont utilisées pour envoyer des messages entre deux ressources Message Queuing ou plus, c'est-à-dire entre deux files d'attente appartenant à une entreprise Message Queuing.

  • Les transactions externes servent à envoyer des messages entre des files d'attente et d'autres ressources, telles que les bases de données.

Les transactions internes et externes présentent des différences dans leur modèle de programmation, dans le gestionnaire de ressources utilisé pour diriger la transaction et dans leurs modèles d'utilisation.

Transactions internes

Les transactions internes sont exécutées par la création d'une instance de la classe MessageQueueTransaction et par l'association de cette dernière à une instance du composant MessageQueue. Une transaction interne constitue la forme la plus simple de la transaction. Les messages circulent entre deux files d'attente de messages ou plus, et c'est le coordinateur de transactions de Message Queuing qui régit les actions ayant lieu. Dans la mesure où vous commandez manuellement ces étapes du processus, les transactions internes peuvent être considérées comme des transactions manuelles ou explicites, alors que les transactions externes sont automatiques ou implicites.

Le modèle de programmation des transactions internes est très simple. Il suffit d'appeler la méthode Begin de la classe MessageQueueTransaction et de passer une instance de cette classe à la méthode émettrice ou réceptrice. Appelez ensuite Commit pour enregistrer les modifications apportées à la transaction dans la file d'attente de destination. Pour plus d'informations, consultez Comment : envoyer des messages dans des transactions internes.

Les transactions internes sont quelque peu limitées sur le plan de la fonctionnalité, en ce sens qu'elles ne peuvent pas être exécutées avec des ressources non-Message Queuing, telles que les bases de données. Seule une transaction externe permet d'interagir avec une base de données dans le cadre d'une transaction. Toutefois, en dépit de ces limites, les performances des transactions internes sont meilleures que celles des transactions externes.

Les transactions externes et internes exigent l'envoi de messages à une file d'attente marquée comme étant transactionnelle. Pour plus d'informations, consultez Comment : créer des files d'attente transactionnelles.

Transactions externes

Les transactions externes sont généralement utilisées pour envoyer des messages entre les files d'attente et un autre type de ressources. Il est possible, par exemple, que vous souhaitiez récupérer un message d'une file d'attente et l'envoyer vers une base de données, ou inversement. Les transactions externes se distinguent des transactions internes sous divers aspects :

  • Les transactions externes utilisent un coordinateur qui ne fait pas partie du système Message Queuing. Dans la plupart des cas, il s'agit du Microsoft Distributed Transaction Coordinator (DTC). Le DTC enrôle les ressources nécessaires dans la transaction et dirige le processus visant à déterminer si toutes les actions de la transaction réussissent ou échouent dans leur ensemble.

  • Une transaction externe possède un modèle de programmation plus complexe. Au lieu d'appeler simplement les méthodes Begin, Commit et Abort, spécifiez des attributs qui indiquent qu'il s'agit une transaction externe et inscrivent le composant auprès des services COM+ 1.0. Vous devez par ailleurs utiliser une forme spéciale des méthodes Send et Receive qui prend un paramètre pour indiquer le type de transaction et affecter la valeur Automatic à ce champ.

Il existe également d'autres types de transactions qui peuvent être envoyées sans passer par le composant MessageQueue. Pour plus d'informations sur les transactions dans Visual Studio ou le .NET Framework, consultez les rubriques suivantes :

Pour plus d'informations sur le sujet suivant

Consultez

Un exemple illustrant les attributs employés avec les transactions externes

Consultez MSDN Online.

Transactions en C++

Transactions

Voir aussi

Tâches

Comment : créer des files d'attente transactionnelles

Comment : envoyer des messages dans des transactions internes

Autres ressources

Lecture et réception de messages