Срок действия сообщений служебной шины Azure

Полезные данные в сообщении либо команда или запрос, которые сообщение передает получателю, почти всегда имеют срок действия, который тем или иным образом определяется на уровне приложения. По прошествии данного крайнего срока содержимое уже не доставляется или не выполняется запрошенная операция.

Для среды разработки и тестовой среды, в которых очереди и разделы часто используются в контексте частичного запуска приложений или частей приложений, желательно также выполнять автоматическую сборку мусора для удаления потерянных тестовых сообщений, чтобы следующий тест можно было выполнить "с чистого листа".

Примечание

Если вы еще не знакомы с основными понятиями служебной шины, см. разделы Основные понятия служебной шины и Очереди, разделы и подписки служебной шины.

Истечение срока действия любого отдельного сообщения можно контролировать, задав системное свойство time-to-live, которое указывает относительную продолжительность. Срок действия истекает мгновенно, когда сообщение помещается в очередь в сущности. В этот момент свойство expires-at-utc принимает значение enqueued-time-utc + time-to-live. Параметр time-to-live (TTL) (срок жизни) не применяется к сообщению в брокере, если нет клиентов, активно ожидающих передачу данных.

После того, как момент expires-at-utc пройдет, сообщения станут недоступными для получения. Срок действия не касается сообщений, доставка которых в текущий момент заблокирована. Такие сообщения обрабатываются обычным образом. Если срок действия блокировки истекает или сообщение отбрасывается, его срок действия вступает в силу немедленно. Во время блокировки сообщения приложение может посчитать, что его срок действия истек. Будет ли приложение обрабатывать это сообщение или отбросит его, определяется разработчиком.

Если установить слишком низкое значение срока жизни в миллисекундах или секундах срок действия сообщения может истечь еще до того, как приложение его получит. Лучше установить самый большой срок жизни, который подходит для вашего приложения.

Срок действия уровня сущности

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

Примечание

  • Для сообщения в брокере по умолчанию устанавливается максимально возможное значение срока жизни для 64-разрядного целого числа, если не указано иное.
  • Для сущностей обмена сообщениями (очередей и разделов) срок действия по умолчанию также является максимально возможным значением для 64-разрядного целого числа со знаком для уровней "Стандарт" и "Премиум" служебной шины Microsoft Azure. Для базового уровня срок действия по умолчанию (также максимальный) составляет 14 дней.
  • Если для раздела задано меньшее значение TTL, чем для подписки, применяется значение TTL для раздела.

Сообщения с истекшим сроком действия при необходимости можно переместить в очередь недоставленных сообщений. Этот параметр можно настроить программно или с помощью портала Microsoft Azure. Если этот параметр оставить отключенным, то просроченные сообщения будут удаляться. Сообщения с истекшим сроком действия, перемещенные в очередь недоставленных сообщений, можно отличить от других недоставленных сообщений, по свойству dead-letter reason, которое брокер сохраняет в разделе пользовательских свойств.

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

Сочетание срока действия и автоматического (и транзакционного) перемещения в очередь недоставленных сообщений по истечении срока действия, позволяет гарантировать, что задание с крайним сроком, переданное обработчику или группе обработчиков, будет получено для обработки к этому крайнему сроку.

Для примера рассмотрим веб-сайт, который должен надежно выполнять задания в серверной части с ограниченными возможностями масштабирования и который иногда подвержен скачкам трафика или должен быть независимым от доступности этой серверной части. В обычном случае обработчик на стороне сервера, предназначенный для отправленных данных пользователя, передает информацию в очередь и затем получает ответ, подтверждающий успешную обработку транзакций в очереди ответов. Если происходит скачок трафика и внутренний обработчик не может обработать свои элементы невыполненной работы вовремя, то просроченные задания возвращаются в очередь недоставленных сообщений. Текущий пользователь может быть оповещен о том, что запрошенная операция займет немного больше времени, чем обычно, и что затем запрос можно будет поместить в другую очередь для обработки. В итоге результат обработки отправляется пользователю по электронной почте.

Временные сущности

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

Автоматическую очистку удобно применять в сценариях разработки и тестирования, в которых сущности создаются динамически и не очищаются после использования из-за прерывания цикла тестирования или отладки. Ее также удобно использовать, когда приложение создает динамические сущности, такие как очередь ответов, для получения ответов процессом веб-сервера или в другим объектом с относительно небольшим временем существования. После того, как экземпляр объекта исчезает, надежно очищать эти сущности сложно.

Эта функция включается с помощью свойства auto delete on idle в пространстве имен. Для этого свойства задается значение времени, в течение которого сущность должна быть неактивной (не использоваться) и по истечении которого она автоматически удаляется. Минимальное значение для свойства — 5 минут.

Важно!

Если установить уровень блокировки Azure Resource ManagerCanNotDelete, это не исключает возможности удаления сущностей с AutoDeleteOnIdle на уровне пространства имен или на более высоком уровне. Если вы хотите запретить удаление сущности, присвойте свойству AutoDeleteOnIdle значение DataTime.MaxValue.

Неактивность

Ниже описаны условия, которые определяют неактивность сущностей (очередей, разделов и подписок).

Сущность Что считается бездействием
Очередь
  • Нет отправок.
  • Нет получений.
  • Нет обновлений очереди.
  • Нет запланированных сообщений.
  • Нет просмотров или обзоров.
Раздел
  • Нет отправок.
  • Нет обновлений раздела.
  • Нет запланированных сообщений.
  • Нет операций с подписками раздела (см. следующую строку)
Подписка
  • Нет получений.
  • Нет обновлений подписки.
  • В подписке нет новых добавленных правил.
  • Нет просмотров или обзоров.

Пакеты SDK

Дальнейшие действия

Дополнительную информацию об обмене сообщениями через служебную шину см. в следующих статьях: