Поделиться через


Настройка обнаружения повторяющихся сообщений для очереди или раздела Служебной шины Azure

Когда вы включите обнаружение повторяющихся сообщений для очереди или раздела, Служебная шина Azure будет сохранять журнал всех сообщений, отправленных в эту очередь или раздел за указанный промежуток времени. В течение этого интервала очередь или раздел не будет сохранять дублирующиеся сообщения. Включение этого свойства гарантирует строго однократную доставку сообщений за промежуток времени, указанный пользователем. Дополнительные сведения см. в статье Обнаружение дубликатов. В этой статье описаны разные способы настройки обнаружения повторяющихся сообщений в очереди или разделе Служебной шины.

Примечание.

  • Ценовая категория "Базовый" Служебной шины не поддерживает обнаружение повторяющихся сообщений, а категории "Стандартный" и "Премиум" — поддерживают. Различия между этими ценовыми категориями приведены на странице цен на Служебную шину.
  • Вы не можете включить или отключить обнаружение дубликатов после создания очереди или раздела. Это можно сделать только в процессе создания очереди или раздела.

Используя портал Azure

При создании очереди на портале Azure установите флажок Включить обнаружение повторений, как показано на следующем изображении. Интервал времени для обнаружения повторений можно настроить при создании очереди или раздела.

Enable duplicate detection at the time of the queue creation

При создании раздела на портале Azure установите флажок Включить обнаружение повторений, как показано на следующем изображении.

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

Чтобы создать очередь с обнаружением повторений, выполните команду 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. Здесь устанавливается интервал длительностью в один день. Значение по умолчанию — 10 минут, а максимально допустимое значение составляет семь дней.

Чтобы настроить новый интервал обнаружения для очереди, выполните команду az servicebus queue update с параметром --duplicate-detection-history-time-window. В этом примере устанавливается длительность интервала в семь дней.

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. В этом примере устанавливается длительность интервала в семь дней.

az servicebus topic update \
    --resource-group myresourcegroup \
    --namespace-name mynamespace \
    --name myqueue \
    --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. Здесь устанавливается интервал длительностью в один день. Значение по умолчанию — 10 минут, а максимально допустимое значение составляет семь дней.

Чтобы настроить новый интервал обнаружения для очереди, воспользуйтесь следующим примером. В этом примере устанавливается длительность интервала в семь дней.

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

$queue.DuplicateDetectionHistoryTimeWindow='P7D'

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

Чтобы настроить новый интервал обнаружения для раздела, воспользуйтесь следующим примером. В этом примере устанавливается длительность интервала в семь дней.

$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

Чтобы создать очередь с обнаружением повторений, задайте для параметра requiresDuplicateDetection значение true в разделе свойств очереди. Дополнительные сведения см. в справочнике по шаблонам пространств имен/очередей Microsoft.ServiceBus. Укажите значение для свойства duplicateDetectionHistoryTimeWindow, чтобы задать интервал обнаружения повторений. В следующем примере настраивается значение в один день.

{
  "$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"
          }
        }
      ]
    }
  ]
}

Чтобы создать раздел с обнаружением повторений, задайте для параметра 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.

Примеры для более ранних клиентских библиотек .NET и Java см. ниже.

30 сентября 2026 г. мы удалим библиотеки пакета SDK Служебная шина Azure WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus и com.microsoft.azure.servicebus, которые не соответствуют рекомендациям по пакету SDK Azure. Мы также завершим поддержку протокола SBMP, поэтому вы больше не сможете использовать этот протокол после 30 сентября 2026 года. Перейдите в последние библиотеки пакета SDK Azure, которые предлагают критически важные обновления системы безопасности и улучшенные возможности до этой даты.

Хотя старые библиотеки по-прежнему могут использоваться после 30 сентября 2026 года, они больше не будут получать официальную поддержку и обновления от Майкрософт. Дополнительные сведения см. в объявлении о выходе на пенсию в службу поддержки.