Azure Service Bus のキューまたはトピックで重複メッセージの検出を有効にする

キューまたはトピックで重複データ検出を有効にすると、Azure Service Bus によって、キューまたはトピックに送信されたすべてのメッセージの履歴が構成された期間に保持されます。 この期間中は、キューまたはトピックに重複メッセージは格納されません。 このプロパティを有効にすると、ユーザーが定義した期間に配信が 1 回だけ行われることが保証されます。 詳細については、「重複検出」を参照してください。 この記事では、Service Bus のキューまたはトピックで重複メッセージの検出を有効にするさまざまな方法について説明します。

Note

  • Service Bus の Basic レベルでは、重複検出はサポートされません。 Standard と Premium レベルでは、重複検出はサポートされます。 これらのレベルの違いについては、「Service Bus の価格」を参照してください。
  • キューまたはトピックが作成された後に、重複データ検出を有効または無効にすることはできません。 それができるのはキューまたはトピックの作成時のみです。

Azure Portal の使用

Azure portal でキューを作成する場合は、次の図に示すように [重複データ検出を有効にする] を選択します。 キューまたはトピックを作成するときに、重複データ検出ウィンドウのサイズを構成できます。

Enable duplicate detection at the time of the queue creation

Azure portal でトピックを作成する場合は、次の図に示すように [重複データ検出を有効にする] を選択します。

Enable duplicate detection at the time of the topic creation

作成時に重複データ検出を有効にした場合は、既存のキューまたはトピックに対してこの設定を構成することもできます。

既存のキューまたはトピックの重複データ検出ウィンドウのサイズを更新する

既存のキューまたはトピックの重複データ検出ウィンドウのサイズを変更するには、 [概要] ページで [重複データ検出ウィンドウ][変更] を選択します。

キュー

Set duplicate detection window size for a queue

トピック

Set duplicate detection window size for a topic

Azure CLI の使用

重複データ検出を有効にしたキューを作成するには、--enable-duplicate-detectiontrue に設定して az servicebus queue create コマンドを使用します。

az servicebus queue create \
    --resource-group myresourcegroup \
    --namespace-name mynamespace \
    --name myqueue \
    --enable-duplicate-detection true \
    --duplicate-detection-history-time-window P1D

重複データ検出を有効にしたトピックを作成するには、--enable-duplicate-detectiontrue に設定して az servicebus topic create コマンドを使用します。

az servicebus topic create \
    --resource-group myresourcegroup \
    --namespace-name mynamespace \
    --name mytopic \
    --enable-duplicate-detection true \
    --duplicate-detection-history-time-window P1D

上記の例では、--duplicate-detection-history-time-window パラメーターを使用して重複データ検出ウィンドウのサイズも設定しています。 ウィンドウのサイズは 1 日に設定されています。 既定値は 10 分で、許容される最大値は 7 日です。

新しい検出ウィンドウのサイズでキューを更新するには、--duplicate-detection-history-time-window パラメーターを指定して az servicebus queue update コマンドを使用します。 この例では、ウィンドウのサイズは 7 日間に更新されています。

az servicebus queue update \
    --resource-group myresourcegroup \
    --namespace-name mynamespace \
    --name myqueue \
    --duplicate-detection-history-time-window P7D

同様に、新しい検出ウィンドウのサイズでトピックを更新するには、--duplicate-detection-history-time-window パラメーターを指定して az servicebus topic update コマンドを使用します。 この例では、ウィンドウのサイズは 7 日間に更新されています。

az servicebus topic update \
    --resource-group myresourcegroup \
    --namespace-name mynamespace \
    --name myqueue \
    --duplicate-detection-history-time-window P7D

Azure PowerShell の使用

重複データ検出を有効にしたキューを作成するには、-RequiresDuplicateDetection$True に設定して New-AzServiceBusQueue コマンドを使用します。

New-AzServiceBusQueue -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -QueueName myqueue `
    -RequiresDuplicateDetection $True `
    -DuplicateDetectionHistoryTimeWindow P1D

重複データ検出を有効にしたトピックを作成するには、-RequiresDuplicateDetectiontrue に設定して New-AzServiceBusTopic コマンドを使用します。

New-AzServiceBusTopic -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -Name mytopic `
    -RequiresDuplicateDetection $True
    -DuplicateDetectionHistoryTimeWindow P1D

上記の例では、-DuplicateDetectionHistoryTimeWindow パラメーターを使用して重複データ検出ウィンドウのサイズも設定しています。 ウィンドウのサイズは 1 日に設定されています。 既定値は 10 分で、許容される最大値は 7 日です。

新しい検出ウィンドウのサイズでキューを更新するには、次の例を参照してください。 この例では、ウィンドウのサイズは 7 日間に更新されています。

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

$queue.DuplicateDetectionHistoryTimeWindow='P7D'

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

新しい検出ウィンドウのサイズでトピックを更新するには、次の例を参照してください。 この例では、ウィンドウのサイズは 7 日間に更新されています。

$topic=Get-AzServiceBusTopic -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -Name mytopic

$topic.DuplicateDetectionHistoryTimeWindow='P7D'

Set-AzServiceBusTopic -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -Name mytopic `
    -TopicObj $topic

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

重複データ検出を有効にしたキューを作成するには、キューの properties セクションで requiresDuplicateDetectiontrue に設定します。 詳細については、Microsoft.ServiceBus の名前空間/キューのテンプレート リファレンスに関するページを参照してください。 重複データ検出ウィンドウのサイズを設定するには、duplicateDetectionHistoryTimeWindow プロパティに値を指定します。 次の例では、1 日に設定されます。

{
  "$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": {
            "requiresDuplicateDetection": true,
            "duplicateDetectionHistoryTimeWindow": "P1D"
          }
        }
      ]
    }
  ]
}

重複データ検出を有効にしたトピックを作成するには、トピックの properties セクションで requiresDuplicateDetectiontrue に設定します。 詳細については、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"
      }
    },
    "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": {
            "requiresDuplicateDetection": true,
            "duplicateDetectionHistoryTimeWindow": "P1D"
          }
        }
      ]
    }
  ]
}

次のステップ

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

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

2026 年 9 月 30 日に、Azure SDK ガイドラインに準拠していない Azure Service Bus SDK ライブラリ WindowsAzure.ServiceBus、Microsoft.Azure.ServiceBus、および com.microsoft.azure.servicebus は廃止されます。 SBMP プロトコルのサポートも終了するため、2026 年 9 月 30 日以降、このプロトコルを使用できなくなります。 この日付より前に、重要なセキュリティ更新プログラムと強化された機能を提供する最新の Azure SDK ライブラリに移行してください。

以前のライブラリは 2026 年 9 月 30 日以降も引き続き使用できますが、Microsoft から公式のサポートと更新プログラムは提供されなくなります。 詳細については、サポート廃止のお知らせに関するページを参照してください。