次の方法で共有


Azure Service Bus から Event Grid への統合の概要

Service Bus は、受信者が存在しない場合にキューまたはサブスクリプションにメッセージがある場合に Event Grid にイベントを出力できます。 Service Bus 名前空間への Event Grid サブスクリプションを作成し、これらのイベントをリッスンしてから、レシーバーを起動してイベントに対応できます。 この機能を使用すると、反応性プログラミング モデルで Service Bus を使用できます。 この機能の主なシナリオは、メッセージの量が少ない Service Bus キューまたはサブスクリプションに、メッセージを継続的にポーリングするレシーバーを用意する必要がないということです。

この機能を有効にするには、次のものが必要です。

  • 少なくとも 1 つの Service Bus キューを持つ Service Bus Premium 名前空間、または少なくとも 1 つのサブスクリプションを持つ Service Bus トピック。
  • Service Bus 名前空間への共同作成者アクセス。 Azure portal で Service Bus 名前空間に移動し、 アクセス制御 (IAM) を選択し、[ ロールの割り当て ] タブを選択します。名前空間への共同作成者アクセス権があることを確認します。
  • さらに、Service Bus 名前空間の Event Grid サブスクリプションが必要です。 このサブスクリプションは、受け取るメッセージがあることを Event Grid から通知を受け取ります。 一般的なサブスクライバーは、Azure App Service、Azure Functions、または Web アプリに接続する Webhook の Logic Apps 機能です。 その後、サブスクライバーはメッセージを処理します。

19

使用可能なイベントの種類

Service Bus は、次のイベントの種類を出力します。

イベントの種類 説明
Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners 新しいアクティブなメッセージがキューまたはサブスクリプションに到着し、リッスンしている受信者がいない場合に発生します。
Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners 新しいアクティブなメッセージが配信不能キューに到着し、アクティブなリスナーが存在しない場合に発生します。
Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications キューまたはサブスクリプションにアクティブなメッセージがある場合、その特定のキューまたはサブスクリプションにアクティブなリスナーがある場合でも、30 秒ごとに発生します。 また、アクティブなメッセージ数が 0 からキューまたはサブスクリプションの正の値に移行したときにも発生します。
Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications キューまたはサブスクリプションの配信不能エンティティにメッセージがある場合、その特定のキューまたはサブスクリプションの配信不能エンティティにアクティブなリスナーがある場合でも、30 秒ごとに発生します。 また、配信不能メッセージ数が 0 からキューまたはサブスクリプションの配信不能エンティティの正の値に遷移したときにも発生します。

イベントの例

リスナーなしで使用可能なアクティブなメッセージ

このイベントは、キューまたはサブスクリプションにアクティブなメッセージがあり、リッスンしている受信者がいない場合に生成されます。

[{
  "topic": "/subscriptions/{subscription-id}/resourcegroups/{your-rg}/providers/Microsoft.ServiceBus/namespaces/{your-service-bus-namespace}",
  "subject": "topics/{your-service-bus-topic}/subscriptions/{your-service-bus-subscription}",
  "eventType": "Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners",
  "eventTime": "2018-02-14T05:12:53.4133526Z",
  "id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
  "data": {
    "namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
    "requestUri": "https://{your-service-bus-namespace}.servicebus.windows.net/{your-topic}/subscriptions/{your-service-bus-subscription}/messages/head",
    "entityType": "subscriber",
    "queueName": "QUEUE NAME IF QUEUE",
    "topicName": "TOPIC NAME IF TOPIC",
    "subscriptionName": "SUBSCRIPTION NAME"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

リスナーなしで使用できる配信不能メッセージ

配信不能キュー イベントのスキーマは似ています。 配信不能キューごとに、メッセージがあり、アクティブなレシーバーがないイベントが少なくとも 1 つ発生します。

[{
  "topic": "/subscriptions/{subscription-id}/resourcegroups/{your-rg}/providers/Microsoft.ServiceBus/namespaces/{your-service-bus-namespace}",
  "subject": "topics/{your-service-bus-topic}/subscriptions/{your-service-bus-subscription}",
  "eventType": "Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners",
  "eventTime": "2018-02-14T05:12:53.4133526Z",
  "id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
  "data": {
    "namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
    "requestUri": "https://{your-service-bus-namespace}.servicebus.windows.net/{your-topic}/subscriptions/{your-service-bus-subscription}/$deadletterqueue/messages/head",
    "entityType": "subscriber",
    "queueName": "QUEUE NAME IF QUEUE",
    "topicName": "TOPIC NAME IF TOPIC",
    "subscriptionName": "SUBSCRIPTION NAME"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

アクティブなメッセージの利用可能な定期的な通知

このイベントは、特定のキューまたはサブスクリプションにアクティブなメッセージがある場合、その特定のキューまたはサブスクリプションのアクティブなリスナーがある場合でも、定期的に生成されます。

[{
  "topic": "/subscriptions/<subscription id>/resourcegroups/DemoGroup/providers/Microsoft.ServiceBus/namespaces/<YOUR SERVICE BUS NAMESPACE WILL SHOW HERE>",
  "subject": "topics/<service bus topic>/subscriptions/<service bus subscription>",
  "eventType": "Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications",
  "eventTime": "2018-02-14T05:12:53.4133526Z",
  "id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
  "data": {
    "namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
    "requestUri": "https://YOUR-SERVICE-BUS-NAMESPACE-WILL-SHOW-HERE.servicebus.windows.net/TOPIC-NAME/subscriptions/SUBSCRIPTIONNAME/$deadletterqueue/messages/head",
    "entityType": "subscriber",
    "queueName": "QUEUE NAME IF QUEUE",
    "topicName": "TOPIC NAME IF TOPIC",
    "subscriptionName": "SUBSCRIPTION NAME"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

配信不能メッセージの利用可能な定期的な通知

このイベントは、特定のキューまたはサブスクリプションの配信不能エンティティにアクティブなリスナーがある場合でも、特定のキューまたはサブスクリプションに配信不能メッセージがある場合に定期的に生成されます。

[{
  "topic": "/subscriptions/<subscription id>/resourcegroups/DemoGroup/providers/Microsoft.ServiceBus/namespaces/<YOUR SERVICE BUS NAMESPACE WILL SHOW HERE>",
  "subject": "topics/<service bus topic>/subscriptions/<service bus subscription>",
  "eventType": "Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications",
  "eventTime": "2018-02-14T05:12:53.4133526Z",
  "id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
  "data": {
    "namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
    "requestUri": "https://YOUR-SERVICE-BUS-NAMESPACE-WILL-SHOW-HERE.servicebus.windows.net/TOPIC-NAME/subscriptions/SUBSCRIPTIONNAME/$deadletterqueue/messages/head",
    "entityType": "subscriber",
    "queueName": "QUEUE NAME IF QUEUE",
    "topicName": "TOPIC NAME IF TOPIC",
    "subscriptionName": "SUBSCRIPTION NAME"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

イベントのプロパティ

イベントのトップレベルのデータを次に示します。

プロパティ タイプ 説明
topic ひも イベント ソースの完全なリソース パス。 このフィールドは書き込み可能ではありません。 この値は Event Grid によって指定されます。
subject ひも 発行元が定義したイベントの対象のパス。
eventType ひも このイベント ソースに登録されているイベントの種類の 1 つ。
eventTime ひも プロバイダーの UTC 時刻に基づいてイベントが生成される時刻。
id ひも イベント専用の識別子。
data オブジェクト Service Bus イベント データ。
dataVersion ひも データ オブジェクトのスキーマ バージョン。 パブリッシャーはスキーマのバージョンを定義します。
metadataVersion ひも イベント メタデータのスキーマ バージョン。 Event Grid では、最上位レベルのプロパティのスキーマを定義します。 この値は Event Grid によって指定されます。

データ オブジェクトには、次のプロパティがあります。

プロパティ タイプ 説明
namespaceName ひも リソースが存在する Service Bus 名前空間。
requestUri ひも イベントを生成する特定のキューまたはサブスクリプションへの URI。
entityType ひも イベント (キューまたはサブスクリプション) を出力する Service Bus エンティティの種類。
queueName ひも キューをサブスクライブしている場合は、アクティブなメッセージを含むキュー。 トピック/サブスクリプションを使用する場合は null 値を指定します。
topicName ひも アクティブなメッセージを含む Service Bus サブスクリプションが属しているトピック。 キューを使用する場合は null 値を指定します。
subscriptionName ひも アクティブなメッセージを含む Service Bus サブスクリプション。 キューを使用する場合は null 値を指定します。

Service Bus 名前空間の Event Grid サブスクリプション

Service Bus 名前空間の Event Grid サブスクリプションは、次の 3 つの方法で作成できます。

  • Azure portal。 Azure Logic Apps と Azure Functions をハンドラーとして使用して、Azure portal を使用して Service Bus イベントの Event Grid サブスクリプションを作成する方法については、次のチュートリアルを参照してください。
  • Azure CLI。 次の CLI の例は、Service Bus 名前空間によって作成された システム トピック の Azure Functions サブスクリプションを作成する方法を示しています。

    namespaceid=$(az resource show --namespace Microsoft.ServiceBus --resource-type namespaces --name "<service bus namespace>" --resource-group "<resource group that contains the service bus namespace>" --query id --output tsv
    
    az eventgrid event-subscription create --resource-id $namespaceid --name "<YOUR EVENT GRID SUBSCRIPTION NAME>" --endpoint "<your_endpoint_url>" --subject-ends-with "<YOUR SERVICE BUS SUBSCRIPTION NAME>"
    
  • PowerShell。 以下に例を示します:
    $namespaceID = (Get-AzServiceBusNamespace -ResourceGroupName "<YOUR RESOURCE GROUP NAME>" -NamespaceName "<YOUR NAMESPACE NAME>").Id
    
    New-AzEVentGridSubscription -EventSubscriptionName "<YOUR EVENT GRID SUBSCRIPTION NAME>" -ResourceId $namespaceID -Endpoint "<YOUR ENDPOINT URL>” -SubjectEndsWith "<YOUR SERVICE BUS SUBSCRIPTION NAME>"
    

生成されるイベントの数と頻度

名前空間に複数のキューとトピックまたはサブスクリプションがある場合は、キューごとに少なくとも 1 つのイベントとサブスクリプションごとに 1 つのイベントを取得します。 Service Bus エンティティにメッセージがなく、新しいメッセージが到着した場合、イベントはすぐに生成されます。 または、Service Bus がアクティブなレシーバーを検出しない限り、イベントは 2 分ごとに生成されます。 メッセージの参照によってイベントが中断されることはありません。

既定では、Service Bus は名前空間内のすべてのエンティティのイベントを出力します。 特定のエンティティのみのイベントを取得する場合は、次のセクションを参照してください。

フィルターを使用してイベントを取得する場所を制限する

名前空間内の 1 つのキューまたは 1 つのサブスクリプションからのみイベントを取得する場合は、Event Grid によって提供されるフィルター で開始 または 終了 を使用できます。 一部のインターフェイスでは、フィルターは Pre フィルターと Suffix フィルターと呼ばれます。 複数のキューとサブスクリプションではなく、すべてではなく複数のイベントを取得する場合は、複数の Event Grid サブスクリプションを作成し、それぞれにフィルターを指定できます。

次のステップ

次のチュートリアルを参照してください。