Chaînage des entités Service Bus avec transfert automatiqueChaining Service Bus entities with autoforwarding

La fonctionnalité de transfert automatique de Service Bus vous permet de chaîner une file d’attente ou un abonnement à une autre file d’attente ou rubrique qui fait partie du même espace de noms.The Service Bus autoforwarding feature enables you to chain a queue or subscription to another queue or topic that is part of the same namespace. Quand le transfert automatique est activé, Service Bus supprime automatiquement les messages placés dans la première file d’attente ou le premier abonnement (source) pour les placer dans la deuxième file d’attente ou rubrique (destination).When autoforwarding is enabled, Service Bus automatically removes messages that are placed in the first queue or subscription (source) and puts them in the second queue or topic (destination). Il est toujours possible d’envoyer un message directement à l’entité de destination.It is still possible to send a message to the destination entity directly.

Utilisation du transfert automatiqueUsing autoforwarding

Vous pouvez activer le transfert automatique en définissant les propriétés QueueDescription.ForwardTo ou SubscriptionDescription.ForwardTo sur les objets QueueDescription ou SubscriptionDescription pour la source, comme dans l’exemple suivant :You can enable autoforwarding by setting the QueueDescription.ForwardTo or SubscriptionDescription.ForwardTo properties on the QueueDescription or SubscriptionDescription objects for the source, as in the following example:

SubscriptionDescription srcSubscription = new SubscriptionDescription (srcTopic, srcSubscriptionName);
srcSubscription.ForwardTo = destTopic;
namespaceManager.CreateSubscription(srcSubscription));

L'entité de destination doit exister au moment de la création de l'entité source.The destination entity must exist at the time the source entity is created. Si l'entité de destination n'existe pas, Service Bus renvoie une exception lorsqu'il lui est demandé de créer l'entité source.If the destination entity does not exist, Service Bus returns an exception when asked to create the source entity.

Vous pouvez utiliser le transfert automatique pour mettre à l’échelle une rubrique particulière.You can use autoforwarding to scale out an individual topic. Service Bus limite le nombre d’abonnements à une rubrique donnée à 2 000.Service Bus limits the number of subscriptions on a given topic to 2,000. Vous pouvez créer des abonnements supplémentaires en créant des rubriques de second niveau.You can accommodate additional subscriptions by creating second-level topics. Même si vous n’êtes pas lié par la limitation de Service Bus sur le nombre d’abonnements, l’ajout d’un deuxième niveau de rubriques peut améliorer le débit global de votre rubrique.Even if you are not bound by the Service Bus limitation on the number of subscriptions, adding a second level of topics can improve the overall throughput of your topic.

Scénario de transfert automatique

Vous pouvez également utiliser le transfert automatique pour découpler les expéditeurs de messages des récepteurs.You can also use autoforwarding to decouple message senders from receivers. Par exemple, considérez un système ERP qui se compose de trois modules : Traitement des commandes, Gestion des stocks et Gestion des relations client.For example, consider an ERP system that consists of three modules: order processing, inventory management, and customer relations management. Chacun de ces modules génère des messages qui sont placés en file d’attente dans une rubrique correspondante.Each of these modules generates messages that are enqueued into a corresponding topic. Alice et Bob sont des représentants commerciaux qui s'intéressent à tous les messages liés à leurs clients.Alice and Bob are sales representatives that are interested in all messages that relate to their customers. Pour recevoir ces messages, Alice et Bob créent chacun une file d’attente personnelle et un abonnement sur chacune des rubriques ERP qui transfèrent automatiquement tous les messages à leur file d’attente.To receive those messages, Alice and Bob each create a personal queue and a subscription on each of the ERP topics that automatically forward all messages to their queue.

Scénario de transfert automatique

Si Alice part en vacances, sa file d’attente personnelle, et non la rubrique ERP, se remplit.If Alice goes on vacation, her personal queue, rather than the ERP topic, fills up. Dans ce scénario, étant donné qu’un représentant commercial n’a pas reçu les messages, aucun des rubriques ERP n’atteint jamais son quota.In this scenario, because a sales representative has not received any messages, none of the ERP topics ever reach quota.

Notes

Lorsque le transfert automatique est configuré, la valeur pour AutoDeleteOnIdle sur la destination est automatiquement définie sur la valeur maximale du type de données.When autoforwarding is setup, the value for AutoDeleteOnIdle on the destination is automatically set to the maximum value of the data type. Cela vise à garantir qu’il y a toujours une destination pour les transferts de messages.This is done to ensure that there is always a destination to forward the message to.

Considérations relatives au transfert automatiqueAutoforwarding considerations

Si l’entité de destination accumule de nombreux messages et dépasse le quota, ou si l’entité de destination est désactivée, l’entité source ajoute les messages à sa file d’attente de rebut jusqu’à ce qu’il y ait de l’espace dans la destination (ou que l’entité soit réactivée).If the destination entity accumulates too many messages and exceeds the quota, or the destination entity is disabled, the source entity adds the messages to its dead-letter queue until there is space in the destination (or the entity is re-enabled). Ces messages continuent de résider dans la file d’attente de rebut, donc vous devez explicitement les recevoir et les traiter à partir de la file d’attente de rebut.Those messages continue to live in the dead-letter queue, so you must explicitly receive and process them from the dead-letter queue.

Lors du chaînage de rubriques individuelles pour obtenir une rubrique composite avec de nombreux abonnements, nous vous recommandons d’avoir un nombre modéré d’abonnements à la rubrique de premier niveau et beaucoup d’abonnements aux rubriques de second niveau.When chaining together individual topics to obtain a composite topic with many subscriptions, it is recommended that you have a moderate number of subscriptions on the first-level topic and many subscriptions on the second-level topics. Par exemple, une rubrique de premier niveau avec 20 abonnements, chacun étant chaîné à une rubrique de second niveau possédant 200 abonnements, permet d’obtenir un débit plus élevé qu’une rubrique de premier niveau possédant 200 abonnements, chacun étant chaîné à une rubrique de second niveau possédant 20 abonnements.For example, a first-level topic with 20 subscriptions, each of them chained to a second-level topic with 200 subscriptions, allows for higher throughput than a first-level topic with 200 subscriptions, each chained to a second-level topic with 20 subscriptions.

Service Bus facture une opération pour chaque message transféré.Service Bus bills one operation for each forwarded message. Par exemple, l’envoi d’un message à une rubrique possédant 20 abonnements, chacun d’eux étant configuré pour transférer automatiquement les messages vers une autre file d’attente ou rubrique, est facturé en tant que 21 opérations si tous les abonnements de premier niveau reçoivent une copie du message.For example, sending a message to a topic with 20 subscriptions, each of them configured to autoforward messages to another queue or topic, is billed as 21 operations if all first-level subscriptions receive a copy of the message.

Pour créer un abonnement qui est chaîné à une autre file d’attente ou rubrique, le créateur de l’abonnement doit disposer des autorisations de gestion de l’entité source et l’entité de destination.To create a subscription that is chained to another queue or topic, the creator of the subscription must have Manage permissions on both the source and the destination entity. L’envoi de messages à la rubrique source ne nécessite que des autorisations d’envoi sur la rubrique source.Sending messages to the source topic only requires Send permissions on the source topic.

Étapes suivantesNext steps

Pour plus d’informations sur le transfert automatique, consultez les informations de référence suivantes :For detailed information about autoforwarding, see the following reference topics:

Pour en savoir plus sur les améliorations des performances de Service Bus, consultezTo learn more about Service Bus performance improvements, see