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

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

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

Примечание.

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

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

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

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

Примечание.

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

Например, если задано ScheduledEnqueueTimeUtc значение 5 минут от UtcNow, а TimeToLive до 10 минут сообщение истекает после 5 + 10 = 15 минут. Сообщение материализуется в очереди через 5 минут, а от этого начинается 10 минут.

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

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

Примечание.

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

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

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

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

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

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

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

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

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

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

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

Важно!

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

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

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

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

Важно!

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

Пакеты SDK

Следующие шаги

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