Azure Service Bus のキューまたはトピックで重複メッセージの検出を有効にする
キューまたはトピックで重複データ検出を有効にすると、Azure Service Bus によって、キューまたはトピックに送信されたすべてのメッセージの履歴が構成された期間に保持されます。 この期間中は、キューまたはトピックに重複メッセージは格納されません。 このプロパティを有効にすると、ユーザーが定義した期間に配信が 1 回だけ行われることが保証されます。 詳細については、「重複検出」を参照してください。 この記事では、Service Bus のキューまたはトピックで重複メッセージの検出を有効にするさまざまな方法について説明します。
Note
- Service Bus の Basic レベルでは、重複検出はサポートされません。 Standard と Premium レベルでは、重複検出はサポートされます。 これらのレベルの違いについては、「Service Bus の価格」を参照してください。
- キューまたはトピックが作成された後に、重複データ検出を有効または無効にすることはできません。 それができるのはキューまたはトピックの作成時のみです。
Azure Portal の使用
Azure portal でキューを作成する場合は、次の図に示すように [重複データ検出を有効にする] を選択します。 キューまたはトピックを作成するときに、重複データ検出ウィンドウのサイズを構成できます。
Azure portal でトピックを作成する場合は、次の図に示すように [重複データ検出を有効にする] を選択します。
作成時に重複データ検出を有効にした場合は、既存のキューまたはトピックに対してこの設定を構成することもできます。
既存のキューまたはトピックの重複データ検出ウィンドウのサイズを更新する
既存のキューまたはトピックの重複データ検出ウィンドウのサイズを変更するには、 [概要] ページで [重複データ検出ウィンドウ] の [変更] を選択します。
キュー
トピック
Azure CLI の使用
重複データ検出を有効にしたキューを作成するには、--enable-duplicate-detection
を true
に設定して 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-detection
を true
に設定して 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
重複データ検出を有効にしたトピックを作成するには、-RequiresDuplicateDetection
を true
に設定して 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 セクションで requiresDuplicateDetection
を true
に設定します。 詳細については、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 セクションで requiresDuplicateDetection
を true
に設定します。 詳細については、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 用の Azure Service Bus クライアント ライブラリのサンプル (最新)
- Java 用の Azure Service Bus クライアント ライブラリのサンプル (最新)
- Python 用の Azure Service Bus クライアント ライブラリのサンプル
- JavaScript 用の Azure Service Bus クライアント ライブラリのサンプル
- TypeScript 用の 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 から公式のサポートと更新プログラムは提供されなくなります。 詳細については、サポート廃止のお知らせに関するページを参照してください。