Concatenamento di entità del bus di servizio con l'inoltro automaticoChaining Service Bus entities with auto-forwarding

La funzionalità di inoltro automatico del bus di servizio consente di concatenare una coda o una sottoscrizione a un'altra coda o a un altro argomento che fa parte dello stesso spazio dei nomi.The Service Bus auto-forwarding feature enables you to chain a queue or subscription to another queue or topic that is part of the same namespace. Quando l'inoltro automatico è abilitato, il bus di servizio rimuove automaticamente i messaggi presenti nella prima coda o sottoscrizione (origine) e li inserisce nella seconda coda o argomento (destinazione).When auto-forwarding 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). Si noti che è comunque possibile inviare un messaggio direttamente all'entità di destinazione.Note that it is still possible to send a message to the destination entity directly. Tenere presente che non è possibile concatenare una coda secondaria, ad esempio una coda di messaggi non recapitabili, a una coda o a un argomento differente.Also, it is not possible to chain a subqueue, such as a deadletter queue, to another queue or topic.

Utilizzo dell'inoltro automaticoUsing auto-forwarding

Per abilitare l'inoltro automatico, è possibile impostare la proprietà QueueDescription.ForwardTo o SubscriptionDescription.ForwardTo nell'oggetto QueueDescription o SubscriptionDescription per l'origine, come illustrato nell'esempio seguente.You can enable auto-forwarding 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à di destinazione deve essere presente al momento della creazione dell'entità di origine.The destination entity must exist at the time the source entity is created. In caso contrario, il bus di servizio restituisce un'eccezione quando gli viene chiesto di creare l'entità di origine. If the destination entity does not exist, Service Bus returns an exception when asked to create the source entity.

È possibile usare l'inoltro automatico per aumentare il numero di istanze di un singolo argomento.You can use auto-forwarding to scale out an individual topic. Il bus di servizio limita il numero delle sottoscrizioni per un determinato argomento a 2000.Service Bus limits the number of subscriptions on a given topic to 2,000. Creando argomenti di secondo livello, è possibile aggiungere altre sottoscrizioni.You can accommodate additional subscriptions by creating second-level topics. Si noti che, pur non essendo vincolati dalla limitazione del bus di servizio relativa al numero delle sottoscrizioni, l'aggiunta di un secondo livello di argomenti consente complessivamente di migliorare la velocità effettiva dell'argomento.Note that 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.

Scenario di inoltro automatico

È possibile usare l'inoltro automatico anche per disaccoppiare i mittenti dei messaggi dai destinatari.You can also use auto-forwarding to decouple message senders from receivers. Si consideri ad esempio un sistema ERP costituito da tre moduli: elaborazione degli ordini, gestione del magazzino e gestione dei rapporti con i clienti.For example, consider an ERP system that consists of three modules: order processing, inventory management, and customer relations management. Ognuno di questi moduli genera messaggi che vengono accodati in un argomento corrispondente.Each of these modules generates messages that are enqueued into a corresponding topic. Due dei rappresentanti di vendita sono interessati a tutti i messaggi correlati ai propri clienti.Alice and Bob are sales representatives that are interested in all messages that relate to their customers. Per ricevere questi messaggi, i due rappresentanti creano una coda personale e una sottoscrizione per ognuno degli argomenti ERP che inoltrano automaticamente tutti i messaggi alla rispettiva coda.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.

Scenario di inoltro automatico

Se uno dei rappresentanti si assenta, viene riempita la coda personale, ma non l'argomento ERP.If Alice goes on vacation, her personal queue, rather than the ERP topic, fills up. In questo scenario, poiché un rappresentante di vendita non ha ricevuto alcun messaggio, nessuno degli argomenti ERP raggiunge la quota.In this scenario, because a sales representative has not received any messages, none of the ERP topics ever reach quota.

Considerazioni sulla funzionalità di inoltro automaticoAuto-forwarding considerations

Se l'entità di destinazione accumula troppi messaggi e supera la quota oppure è disabilitata, l'entità di origine aggiunge i messaggi alla relativa coda dei messaggi non recapitabili finché non si libera spazio nella destinazione o l'entità non viene riabilitata.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). I messaggi resteranno nella coda dei messaggi non recapitabili, pertanto sarà necessario riceverli ed elaborarli in modo esplicito da tale coda.Those messages will continue to live in the dead-letter queue, so you must explicitly receive and process them from the dead-letter queue.

Se si concatenano singoli argomenti per ottenere un argomento composito con diverse sottoscrizioni, è consigliabile avere un certo numero di sottoscrizioni nell'argomento di primo livello e un numero più elevato di sottoscrizioni negli argomenti di secondo livello.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. Ad esempio, un argomento di primo livello con 20 sottoscrizioni, ognuna delle quali concatenata a un argomento di secondo livello con 200 sottoscrizioni, consente una velocità effettiva più alta rispetto a un argomento di primo livello con 200 sottoscrizioni, ognuna delle quali concatenata a un argomento di secondo livello con 20 sottoscrizioni.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.

Il bus di servizio addebita un'operazione per ogni messaggio inoltrato.Service Bus bills one operation for each forwarded message. Ad esempio, se viene inviato un messaggio a un argomento con 20 sottoscrizioni, ognuna delle quali configurata per l'inoltro automatico dei messaggi a una coda o un argomento differente, vengono addebitate 21 operazioni se tutte le sottoscrizioni di primo livello ricevono una copia del messaggio.For example, sending a message to a topic with 20 subscriptions, each of them configured to auto-forward messages to another queue or topic, is billed as 21 operations if all first-level subscriptions receive a copy of the message.

Per creare una sottoscrizione concatenata a una coda o a un argomento diverso, l'autore deve avere le autorizzazioni di gestione per l'entità di origine e per quella di destinazione.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. Per l'invio di messaggi solo all'argomento di origine sono necessarie le autorizzazioni di invio per l'argomento di origine.Sending messages to the source topic only requires Send permissions on the source topic.

Passaggi successiviNext steps

Per informazioni dettagliate sull'inoltro automatico, vedere gli argomenti di riferimento seguenti:For detailed information about auto-forwarding, see the following reference topics:

Per altre informazioni sui miglioramenti delle prestazioni del bus di servizio, vedereTo learn more about Service Bus performance improvements, see