Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
为队列或主题启用重复检测时,Azure Service Bus 会在配置的时间段内保留发送到队列或主题的所有消息的历史记录。 在此间隔期间,队列或主题将不会存储任何重复的消息。 启用此属性可保证在用户定义的时间段内准确地传递一次。 有关详细信息,请参阅 重复检测。 本文介绍了为Service Bus队列或主题启用重复消息检测的不同方法。
注意
- Service Bus的基本层不支持重复检测。 标准层和高级层支持重复检测。 有关这些层之间的差异,请参阅 Service Bus 定价。
- 创建队列或主题后,无法启用或禁用重复检测。 只能在创建队列或主题时执行此操作。
使用 Azure 门户
在 Azure 门户中创建 queue 时,请选择 启用重复检测,如下图所示。 你可以在创建队列或主题时配置重复检测窗口的大小。
在 Azure 门户中创建主题时,请选择启用重复检测,如下图所示。
如果你在创建时启用了重复检测,也可以为现有队列或主题配置此设置。
为现有队列或主题更新重复检测窗口大小
若要更改现有队列或主题的重复检测窗口大小,请在“概述”页上选择“重复检测窗口”的“更改”。
队列
主题
使用Azure CLI
若要创建启用了重复检测的队列,请使用设置为az servicebus queue create的--enable-duplicate-detection命令true。
az servicebus queue create \
--resource-group myresourcegroup \
--namespace-name mynamespace \
--name myqueue \
--enable-duplicate-detection true \
--duplicate-detection-history-time-window P1D
若要创建启用了重复检测的主题,请使用az servicebus topic create命令,并将--enable-duplicate-detection设置为true。
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 天。
若要 使用新的检测窗口大小更新队列,请使用有az servicebus queue update参数的--duplicate-detection-history-time-window命令。 在本示例中,时间窗口大小更新为 7 天。
az servicebus queue update \
--resource-group myresourcegroup \
--namespace-name mynamespace \
--name myqueue \
--duplicate-detection-history-time-window P7D
同样,若要 使用新的检测窗口大小更新主题,请使用 az servicebus topic update 命令并配合 --duplicate-detection-history-time-window 参数。 在本示例中,时间窗口大小更新为 7 天。
az servicebus topic update \
--resource-group myresourcegroup \
--namespace-name mynamespace \
--name mytopic \
--duplicate-detection-history-time-window P7D
使用 Azure PowerShell
若要创建启用了重复检测的队列,请使用设置为New-AzServiceBusQueue的-RequiresDuplicateDetection命令$True。
New-AzServiceBusQueue -ResourceGroup myresourcegroup `
-NamespaceName mynamespace `
-QueueName myqueue `
-RequiresDuplicateDetection $True `
-DuplicateDetectionHistoryTimeWindow P1D
若要创建启用了重复检测的主题,请使用New-AzServiceBusTopic命令,并将-RequiresDuplicateDetection设置为true。
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
使用模板
若要创建启用了重复检测的队列,请在“队列属性”部分将requiresDuplicateDetection设为true。 有关详细信息,请参阅 Microsoft.ServiceBus 命名空间/队列模板参考。 指定 duplicateDetectionHistoryTimeWindow 属性的值以设置重复检测窗口的大小。 在以下示例中,它被设为 1 天。
@description('Name of the Service Bus namespace')
param serviceBusNamespaceName string
@description('Name of the Queue')
param serviceBusQueueName string
@description('Location for all resources.')
param location string = resourceGroup().location
resource serviceBusNamespace 'Microsoft.ServiceBus/namespaces@2024-01-01' = {
name: serviceBusNamespaceName
location: location
sku: {
name: 'Standard'
}
resource queue 'queues' = {
name: serviceBusQueueName
properties: {
requiresDuplicateDetection: true
duplicateDetectionHistoryTimeWindow: 'P1D'
}
}
}
若要创建启用了重复检测的主题,请在“主题属性”部分设置为requiresDuplicateDetectiontrue。 有关详细信息,请参阅 Microsoft.ServiceBus 命名空间/主题模板参考。
@description('Name of the Service Bus namespace')
param serviceBusNamespaceName string
@description('Name of the Topic')
param serviceBusTopicName string
@description('Location for all resources.')
param location string = resourceGroup().location
resource serviceBusNamespace 'Microsoft.ServiceBus/namespaces@2024-01-01' = {
name: serviceBusNamespaceName
location: location
sku: {
name: 'Standard'
}
resource topic 'topics' = {
name: serviceBusTopicName
properties: {
requiresDuplicateDetection: true
duplicateDetectionHistoryTimeWindow: 'P1D'
}
}
}
后续步骤
尝试使用所选语言的示例来探索Azure Service Bus功能。
- Azure Service Bus 客户端库示例(.NET 最新版)
- Azure Service Bus 用于 Java 的客户端库示例(最新版)
- Azure Service Bus 客户端库 Python 示例
- 适用于 JavaScript 的 Azure Service Bus 客户端库示例
- typeScript 的 Azure Service Bus 客户端库示例
在下面查找较旧的.NET和Java客户端库的示例:
注意
2026 年 9 月 30 日,我们将停用 Azure Service Bus SDK 库 WindowsAzure.ServiceBus Microsoft.Azure。ServiceBus 和 com.microsoft。azure.servicebus 不符合Azure SDK准则。 我们还将结束对 SBMP 协议的支持,因此在 2026 年 9 月 30 日之后,你将无法再使用此协议。 在该日期之前迁移到最新的 Azure SDK 库,这些库提供关键的安全更新和改进的功能。
尽管旧库仍可在 2026 年 9 月 30 日以后使用,但它们将不再从Azure获得官方支持和更新。 有关详细信息,请参阅支持停用公告。