Partager via


Interfaces pour un adaptateur de réception pris en charge par lot

Un adaptateur de réception envoie toujours les messages par lots. Un lot est une unité d'opérations de base de données que vous pouvez utilisez pour les actions autres que l'envoi. Par exemple, un adaptateur de réception peut envoyer un ensemble de messages, en suspendre un autre et en supprimer un troisième dans le même lot. Le regroupement de ces opérations distinctes au sein d'un même lot est vivement recommandé car il permet d'optimiser les performances en minimisant le nombre d'allers-retours obligatoires vers une base de données.

Les adaptateurs de réception in-process et isolés doivent implémenter les interfaces suivantes pour envoyer des lots de messages au serveur :

  • IBTTransport

  • IBTTransportControl (adaptateurs in-process uniquement)

  • IBTTransportConfig

  • IBaseComponent

  • IPersistPropertyBag

  • IBTBatchCallBack

    Les étapes suivantes décrivent la séquence d'actions effectuée par un adaptateur de réception afin d'envoyer les messages au serveur.

  1. Un adaptateur de réception obtient le lot du proxy de transport en appelant la méthode GetBatch de l’interface IBTTransportProxy . Dans son appel à GetBatch , l’adaptateur passe un pointeur vers son implémentation d’interface IBTBatchCallback .

  2. Un adaptateur ajoute les messages un par un dans le lot en appelant la méthode SubmitMessage de l’interface IBTTransportBatch . S’il s’agit d’une opération bidirectionnelle telle que la messagerie sollicitation-réponse, la méthode SubmitResponseMessage de cette même interface est appelée pour envoyer le message de réponse.

  3. Lorsque tous les messages ont été ajoutés au lot, l’adaptateur appelle la méthode Done de l’interface IBTTransportBatch pour envoyer le lot au proxy de transport. Étant donné que les adaptateurs de réception sont asynchrones par nature, l’adaptateur peut immédiatement obtenir un nouveau lot et commencer à envoyer d’autres messages après avoir appelé Terminé.

  4. Une fois le lot traité, le moteur de messagerie appelle la méthode de rappel BatchComplete de l’adaptateur à l’aide du proxy de transport pour effectuer l’appel réel. Un tableau d’objets BTBatchOperationStatus contenant le status de la soumission est passé à l’adaptateur. Chaque objet correspond à un type d'opération et contient l'état général de l'opération ainsi que l'état de chaque message pour lequel l'opération a été effectuée. La séquence suivante décrit les actions qu'un adaptateur doit effectuer pour analyser l'état d'un traitement par lot.

    1. Vérifiez le lot global status valeur HRESULT passée en tant que paramètre à la méthode BatchComplete. En cas d'échec, cela signifie qu'au moins une des opérations du lot a échoué. Par conséquent, l'envoi du lot en tant qu'entité unique a échoué. L'adaptateur doit alors tenter d'identifier le(s) message(s) responsable(s) et renvoyer en tant que lot uniquement les messages qui ne sont pas à l'origine de l'échec.

      Si l'état général du lot est une réussite, cela signifie que tous les messages transmis au proxy de transport ont été conservés sur le disque. Toutefois, cela ne veut pas dire que le pipeline a traité tous les messages avec succès. Il est possible que les messages ayant échoué dans le pipeline soient suspendus. Pour les messages qui échouent dans le pipeline, l'état général du lot est une réussite car les données ont été écrites sur le disque.

    2. Vérifiez les status pour chaque type d’opération dans le operationStatus paramètre . Si le status est S_OK, l’envoi de cette opération a réussi et vous n’avez pas besoin d’case activée la status plus loin. Si le status est défini sur BTS_S_EPM_MESSAGE_SUSPENDED certains messages ont été suspendus. BTS_S_EPM_SECURITY_CHECK_FAILED signifie que certains messages ont échoué à l’authentification dans un port de réception requis par l’authentification. Si E_FAIL est retourné, ou tout HRESULT dont la valeur est inférieure à zéro, l’envoi du message pour cette opération a échoué.

    3. Vérifiez l'état de chaque message pour le type d'opération. Pour le type d’opération d’envoi, le status de chaque message est défini sur S_OK si l’envoi a réussi. BTS_S_EPM_MESSAGE_SUSPENDED est retourné si le message a été suspendu. BTS_S_EPM_SECURITY_CHECK_FAILED est retourné si l’authentification du message a échoué sur un port de réception qui nécessite une authentification. E_BTS_NO_SUBSCRIPTION revient s’il n’y avait pas d’abonnés pour le message publié. Si E_FAIL est retourné, ou tout HRESULT dont la valeur est inférieure à zéro, l’envoi du message a échoué.

    4. Selon votre adaptateur, vous pouvez suspendre les messages qui retournent E_FAIL ou tout HRESULT défaillant.

  5. La méthode BatchComplete doit retourner S_OK ou E_FAIL pour indiquer le résultat de l’exécution. Si la méthode BatchComplete retourne E_FAIL ou un HRESULT négatif, le proxy de transport enregistre une erreur.

    L'illustration suivante indique les interactions d'objets impliquées dans la création d'un adaptateur de réception pris en charge par lot.

    Image montrant les interactions d’objet impliquées dans la création d’un adaptateur de réception pris en charge par lot.
    Workflow d'un adaptateur de réception envoyant un lot de messages

Voir aussi

Variables d’adaptateur
Développement d’un adaptateur de réception
Instanciation et initialisation d’un adaptateur de réception
Interfaces pour un adaptateur de réception In-process
Interfaces pour un adaptateur de réception isolé
Interfaces pour un adaptateur de réception pris en charge par lot transactionnel
Interfaces pour un adaptateur de réception de type requête-réponse synchrone