自動転送を使用した Service Bus エンティティのチェーン

Service Bus の自動転送機能を使用すると、キューまたはサブスクリプションを同じ名前空間に属する別のキューまたはトピックにチェーンできます。 自動転送が有効な場合、Service Bus は元のキューまたはサブスクリプション (転送元) にあるメッセージを自動的に削除し、そのメッセージを転送先のキューまたはトピックに入れます。 転送先エンティティには、メッセージを直接送信することもできます。

注意

Service Bus の Basic レベルでは、自動転送機能がサポートされていません。 レベルの違いについては、「Service Bus の価格」を参照してください。

転送先エンティティは、ソース エンティティの作成時に存在している必要があります。 転送先エンティティが存在しない場合、Service Bus は、ソース エンティティを作成するように要求されたときに例外を返します。

シナリオ

個々のトピックをスケールアウトする

自動転送を使用すると、トピックを個々にスケールアウトできます。 Service Bus は、特定のトピックのサブスクリプションの数を 2,000 に制限します。 第 2 レベルのトピックを作成することで、より多くのサブスクリプションに対応できます。 Service Bus のサブスクリプションの数に関する制限がない場合でも、トピックの 2 番目のレベルを追加することで、トピック全体のスループットを向上させることができます。

自動転送シナリオの図。1 つの注文トピックを通じて処理されるメッセージを示しています。この注文トピックは、第 2 レベルの 3 つの注文トピックのいずれかに分岐されます。

メッセージの送信者と受信者を分離する

また、自動転送を使用して、メッセージの送信者と受信者を分離することもできます。 たとえば、注文処理、在庫管理、顧客関係管理の 3 つのモジュールで構成されるエンタープライズ リソース プランニング (ERP) システムがあるとします。 これらのモジュールはそれぞれ、対応するトピックにエンキューされるメッセージを生成します。 Alice と Bob は、顧客に関連するすべてのメッセージに関心のある営業担当者です。 これらのメッセージを受信するため、Alice と Bob は、ERP トピックごとに個人用のキューとサブスクリプションを作成して、自動的にすべてのメッセージが自分のキューに転送されるようにします。

自動転送シナリオの図。3 つの処理モジュールによって、3 つの対応するトピックを通じて 2 つの個別のキューに向けてメッセージが送信されています。

Alice が休暇中の場合、ERP トピックではなく、個人用のキューがいっぱいになります。 このシナリオでは、1 人の営業担当者がメッセージをまったく受信しないため、すべての ERP トピックがクォータにリーチしません。

注意

自動転送がセットアップされると、転送元エンティティでの AutoDeleteOnIdle の値は自動的にデータ型の最大値に設定されます。

  • 転送元の側では、自動転送は受信操作として機能するため、自動転送が有効になっている転送元は、実際に "アイドル" 状態になることは決してなく、したがって自動的に削除されることもありません。
  • 自動転送では、転送先エンティティにはいかなる変更も加えられません。 転送先エンティティで AutoDeleteOnIdle が有効な場合、アクティブでない期間が指定のアイドル間隔に達したエンティティは自動的に削除されます。 転送先エンティティが削除された場合、転送元エンティティではその転送先にメッセージを転送しようとすると例外が発生し続けるため、転送先エンティティでは AutoDeleteOnIdle を有効にしないことをお勧めします。

自動転送に関する考慮事項

  • Service Bus では、自動転送が有効になっているソース エンティティにメッセージ レシーバーを作成することはできません。
  • 転送先エンティティに蓄積されたメッセージが多すぎてクォータを超過した場合や、転送先エンティティが無効な場合、ソース エンティティは転送先に領域ができるまで (またはエンティティが再度有効になるまで)、配信不能キューにメッセージを追加します。 これらのメッセージは、配信不能キューに残り続けるので、配信不能キューで明示的に受信して処理する必要があります。
  • 多くのサブスクリプションを含む複合トピックにするために個別のトピックを一緒にチェーンするときには、第 1 レベルのトピックに中程度の数のサブスクリプションと、2 番目のレベルのトピックに多くのサブスクリプションが含まれるようにすることをお勧めします。 たとえば、第 1 レベルのトピックが 20 のサブスクリプションを持ち、そのそれぞれが 200 のサブスクリプションを持つ第 2 レベルのトピックにチェーンされている場合、第 1 レベルのトピックが 200 のサブスクリプションを持ち、そのそれぞれが 20 のサブスクリプションを持つ第 2 レベルのトピックにチェーンされている場合よりも高いスループットが実現されます。
  • Service Bus では、メッセージの転送ごとに 1 操作を請求します。 たとえば、別のキューまたはトピックにメッセージを自動転送するようにそれぞれ構成されている 20 のサブスクリプションを持つトピックにメッセージを送信した場合、第 1 レベルのすべてのサブスクリプションがメッセージを受信すると、21 の操作として請求されます。
  • 別のキューまたはトピックにチェーンされているサブスクリプションを作成するには、サブスクリプションの作成者は、転送元エンティティと転送先エンティティの両方に対する管理アクセス許可が必要です。 転送元トピックにメッセージを送信する場合は、転送元トピックに対する送信アクセス許可のみが必要です。
  • 4 ホップを超えるチェーンを作成しないでください。 4 ホップを超えるメッセージは配信不能です。 あるキューまたはトピックから別のキューまたはトピックにメッセージが自動転送されると、メッセージのホップ数がインクリメントされます。 転送キューを介してメッセージが送信される経由送信シナリオでも、メッセージのホップ数がインクリメントされる場合があります。
  • 自動転送は、セッションが有効なキューまたはサブスクリプションではサポートされていません。
  • ソース キューは、受信したのと同じ順序で宛先エンティティにメッセージを転送しようとしますが、宛先は順序付けをサポートしないトピックである可能性があります。 ソースと宛先のいずれかのエンティティがパーティション分割されたエンティティである場合、順序は保証されません。

次の手順

さまざまな方法 (Azure portal、PowerShell、CLI、Azure Resource Management テンプレートなど) で自動転送を有効または無効に設定する方法については、キューとサブスクリプションの自動転送の有効化に関する記事を参照してください。