Azure Service Bus のキューとサブスクリプションでメッセージの期限切れによる配信不能を有効にする

Azure Service Bus のキューおよびトピックのサブスクリプションでは、配信不能キュー (DLQ) と呼ばれるセカンダリ サブキューが提供されます。 配信不能キューを明示的に作成する必要はなく、削除したり、メイン エンティティとは別に管理したりすることはできません。 配信不能キューの目的は、受信者に配信できないメッセージ、または処理できなかったメッセージを保持することです。 詳しくは、「Service Bus の配信不能キューの概要」を参照してください。 この記事では、Service Bus のキューとサブスクリプションで配信不能を有効にするさまざまな方法について説明します。

Azure Portal の使用

Azure portal でキューまたはトピックのサブスクリプションを作成するとき、次の例に示すように [メッセージの期限切れによる配信不能を有効にする] を選択します。

配信不能が有効化されたキューを作成する

キューの作成時に配信不能を有効にする

配信不能が有効化されたサブスクリプションを作成する

サブスクリプションの作成時に配信不能を有効にする

既存のキューでメッセージの期限切れによる配信不能の設定を更新する

Service Bus キューの [概要] ページで、メッセージの期限切れによる [配信不能] の設定の現在の値を選択します。 次の例では、現在の値は [無効] です。 ポップアップ ウィンドウで、メッセージの期限切れによる配信不能を有効または無効にすることができます。

既存のキューでメッセージの期限切れによる配信不能を有効にする

既存のサブスクリプションでメッセージの期限切れによる配信不能の設定を更新する

Service Bus サブスクリプションの [概要] ページで、メッセージの期限切れによる [配信不能] の設定の現在の値を選択します。 次の例では、現在の値は [無効] です。 ポップアップ ウィンドウで、メッセージの期限切れによる配信不能を有効または無効にすることができます。

既存のサブスクリプションでメッセージの期限切れによる配信不能を有効にする

Azure CLI の使用

メッセージの期限切れによる配信不能が有効化されたキューを作成するには、--enable-dead-lettering-on-message-expirationtrue に設定した az servicebus queue create コマンドを使用します。

az servicebus queue create \
    --resource-group myresourcegroup \
    --namespace-name mynamespace \
    --name myqueue \
    --enable-dead-lettering-on-message-expiration true

既存のキューでメッセージの期限切れによる配信不能の設定を有効にするには、--enable-dead-lettering-on-message-expirationtrue に設定した az servicebus queue update コマンドを使用します。

az servicebus queue update \
    --resource-group myresourcegroup \
    --namespace-name mynamespace \
    --name myqueue \
    --enable-dead-lettering-on-message-expiration true

メッセージの期限切れによる配信不能が有効化されたトピックのサブスクリプションを作成するには、--enable-dead-lettering-on-message-expirationtrue に設定した az servicebus topic subscription create コマンドを使用します。

az servicebus topic subscription create \
    --resource-group myresourcegroup \
    --namespace-name mynamespace \
    --topic-name mytopic \
    --name mysubscription \
    --enable-dead-lettering-on-message-expiration true

トピックのサブスクリプションでメッセージの期限切れによる配信不能の設定を有効にするには、--enable-dead-lettering-on-message-expirationtrue に設定した az servicebus topic subscription update コマンドを使用します。

az servicebus topic subscription update \
    --resource-group myresourcegroup \
    --namespace-name mynamespace \
    --topic-name mytopic \
    --name mysubscription \
    --enable-dead-lettering-on-message-expiration true

注意

--forward-dead-lettered-messages-to パラメーターを使用してキューまたはトピックを指定すると、Event Grid によりそのキューまたはトピックに配信不能メッセージが自動的に転送されます。 次に例を示します: az servicebus queue create --resource-group mysbusrg --namespace-name mysbusns --name myqueue --enable-dead-lettering-on-message-expiration true --forward-dead-lettered-messages-to myqueue2

Azure PowerShell の使用

メッセージの期限切れによる配信不能が有効化されたキューを作成するには、-DeadLetteringOnMessageExpiration$True に設定した New-AzServiceBusQueue コマンドを使用します。

New-AzServiceBusQueue -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -QueueName myqueue `
    -DeadLetteringOnMessageExpiration $True

既存のキューでメッセージの期限切れによる配信不能の設定を有効にするには、次の例に示されているような Set-AzServiceBusQueue コマンドを使用します。

$queue=Get-AzServiceBusQueue -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -QueueName myqueue 

$queue.DeadLetteringOnMessageExpiration=$True

Set-AzServiceBusQueue -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -QueueName myqueue `
    -QueueObj $queue

メッセージの期限切れによる配信不能が有効化されたトピックのサブスクリプションを作成するには、-DeadLetteringOnMessageExpiration$True に設定した New-AzServiceBusSubscription コマンドを使用します。

New-AzServiceBusSubscription -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -TopicName mytopic `
    -SubscriptionName mysubscription `
    -DeadLetteringOnMessageExpiration $True

既存のサブスクリプションでメッセージの期限切れによる配信不能の設定を有効にするには、次の例を参照してください。

$subscription=Get-AzServiceBusSubscription -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -TopicName mytopic `
    -SubscriptionName mysub

$subscription.DeadLetteringOnMessageExpiration=$True

Set-AzServiceBusSubscription -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -Name mytopic `
    -SubscriptionName mysub `
    -SubscriptionObj $subscription 

注意

-ForwardDeadLetteredMessagesTo パラメーターを使用してキューまたはトピックを指定すると、Event Grid によりそのキューまたはトピックに配信不能メッセージが自動的に転送されます。

Azure Resource Manager テンプレートの使用

メッセージの期限切れによる配信不能が有効化されたキューを作成するには、キューのプロパティ セクションで deadLetteringOnMessageExpirationtrue に設定します。 詳細については、Microsoft.ServiceBus の名前空間/キューのテンプレート リファレンスに関するページを参照してください。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "serviceBusNamespaceName": {
      "type": "string",
      "metadata": {
        "description": "Name of the Service Bus namespace"
      }
    },
    "serviceBusQueueName": {
      "type": "string",
      "metadata": {
        "description": "Name of the Queue"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.ServiceBus/namespaces",
      "apiVersion": "2018-01-01-preview",
      "name": "[parameters('serviceBusNamespaceName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard"
      },
      "properties": {},
      "resources": [
        {
          "type": "Queues",
          "apiVersion": "2017-04-01",
          "name": "[parameters('serviceBusQueueName')]",
          "dependsOn": [
            "[resourceId('Microsoft.ServiceBus/namespaces', parameters('serviceBusNamespaceName'))]"
          ],
          "properties": {
            "deadLetteringOnMessageExpiration": true
          }
        }
      ]
    }
  ]
}

メッセージの期限切れによる配信不能が有効化されたトピックのサブスクリプションを作成するには、キューのプロパティ セクションで deadLetteringOnMessageExpirationtrue に設定します。 詳細については、Microsoft.ServiceBus の名前空間/トピック/サブスクリプションのテンプレート リファレンスに関するページを参照してください。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "service_BusNamespace_Name": {
      "type": "string",
      "metadata": {
        "description": "Name of the Service Bus namespace"
      }
    },
    "serviceBusTopicName": {
      "type": "string",
      "metadata": {
        "description": "Name of the Topic"
      }
    },
    "serviceBusSubscriptionName": {
      "type": "string",
      "metadata": {
        "description": "Name of the Subscription"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    }
  },
  "resources": [
    {
      "apiVersion": "2018-01-01-preview",
      "name": "[parameters('service_BusNamespace_Name')]",
      "type": "Microsoft.ServiceBus/namespaces",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard"
      },
      "properties": {},
      "resources": [
        {
          "apiVersion": "2017-04-01",
          "name": "[parameters('serviceBusTopicName')]",
          "type": "topics",
          "dependsOn": [
            "[resourceId('Microsoft.ServiceBus/namespaces/', parameters('service_BusNamespace_Name'))]"
          ],
          "properties": {
            "maxSizeInMegabytes": 1024
          },
          "resources": [
            {
              "apiVersion": "2017-04-01",
              "name": "[parameters('serviceBusSubscriptionName')]",
              "type": "Subscriptions",
              "dependsOn": [
                "[parameters('serviceBusTopicName')]"
              ],
              "properties": {
                "deadLetteringOnMessageExpiration": true
              }
            }
          ]
        }
      ]
    }
  ]
}

注意

forwardDeadLetteredMessagesTo プロパティにキューまたはトピックを指定すると、Event Grid によりそのキューまたはトピックに配信不能メッセージが自動的に転送されます。

次のステップ

Azure Service Bus の機能については、使用する言語のサンプルを試してみてください。

以前の .NET および Java クライアント ライブラリのサンプルについては、以下を参照してください。