Английское название: Rate Limiter.
Новый СтратегияОграниченияВызовов(<ЛимитВызовов>, <ИнтервалЛимита>)Параметры:
| Имя | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
| ЛимитВызовов | Число | 10 |
Максимально допустимое количество вызовов за интервал |
| ИнтервалЛимита | Число | 1000 |
Длительность интервала лимита в миллисекундах |
Стратегия выполняет операцию, если может получить разрешение на вызов.
По умолчанию используется фиксированное окно: стратегия допускает не больше ЛимитВызовов за ИнтервалЛимита. Если лимит исчерпан и МаксимальноеОжиданиеРазрешения равно 0, вызов сразу отклоняется. Если ожидание включено и ближайшее разрешение укладывается в заданный лимит ожидания, стратегия кооперативно ждет освобождения разрешения и затем выполняет операцию.
В режиме ТипыОграниченияВызовов.РавномерноеРаспределение разрешения распределяются равномерно по интервалу. Например, лимит 2 за 120 мс дает одно разрешение примерно каждые 60 мс.
Если прерывание уже запрошено до начала выполнения, стратегия выбрасывает исключение прерывания и не расходует лимит текущего интервала. Если прерывание запрошено во время ожидания разрешения, стратегия завершает ожидание, выбрасывает исключение прерывания и не запускает пользовательскую операцию.
Диаграмма выполнения:
flowchart TD
A[Вызов стратегии] --> B[Проверить прерывание]
B --> C{Разрешение доступно?}
C -- Да --> H[Запустить операцию]
C -- Нет --> D{Можно дождаться<br/>разрешения?}
D -- Да --> F[Подождать с проверкой<br/>прерывания]
F --> C
D -- Нет --> E[Вызвать обработчик превышения<br/>если задан]
E --> G[Выбросить исключение]
H --> I{Есть ошибка?}
I -- Да --> J[Выбросить исключение]
I -- Нет --> K[Вернуть результат]
Применить
УстановитьЛимитВызовов
УстановитьИнтервалЛимита
УстановитьМаксимальноеОжиданиеРазрешения
УстановитьТипОграничения
УстановитьОбработчикПревышенияЛимита
ЛимитВызовов
ИнтервалЛимита
МаксимальноеОжиданиеРазрешения
ТипОграничения
КоличествоВызововЗаИнтервал
Сбросить
Синтаксис:
Применить(<Операция>, <Параметры>, <СигналПрерыванияОперации>)Параметры:
| Имя | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
| Операция | Действие, ШагПайплайнаОтказоустойчивости, Строка | Выполняемая операция, вложенный шаг пайплайна или лямбда-выражение операции | |
| Параметры | Массив, ФиксированныйМассив, Произвольный, Неопределено | Неопределено |
Параметры операции |
| СигналПрерыванияОперации | СигналПрерыванияОперации, Неопределено | Неопределено |
Сигнал кооперативного прерывания операции |
Возвращаемое значение:
Тип: Произвольный.
Описание:
Выполняет операцию с учетом настроенного ограничения вызовов.
Синтаксис:
УстановитьЛимитВызовов(<ЛимитВызовов>)Параметры:
| Имя | Тип | Описание |
|---|---|---|
| ЛимитВызовов | Число | Максимально допустимое количество вызовов за интервал |
Возвращаемое значение:
Тип: СтратегияОграниченияВызовов.
Описание:
Устанавливает лимит вызовов за интервал. В режиме равномерного распределения сбрасывает текущее расписание разрешений, начало текущего интервала и счетчик вызовов за интервал.
Синтаксис:
УстановитьИнтервалЛимита(<ИнтервалЛимита>)Параметры:
| Имя | Тип | Описание |
|---|---|---|
| ИнтервалЛимита | Число | Длительность интервала лимита в миллисекундах |
Возвращаемое значение:
Тип: СтратегияОграниченияВызовов.
Описание:
Устанавливает интервал лимита. В режиме равномерного распределения сбрасывает текущее расписание разрешений, начало текущего интервала и счетчик вызовов за интервал.
Синтаксис:
УстановитьМаксимальноеОжиданиеРазрешения(<МаксимальноеОжиданиеРазрешения>)Параметры:
| Имя | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
| МаксимальноеОжиданиеРазрешения | Число | 0 |
Максимальное время ожидания разрешения в миллисекундах. 0 означает отказ без ожидания |
Возвращаемое значение:
Тип: СтратегияОграниченияВызовов.
Описание:
Включает ожидание разрешения вместо немедленного отказа при превышении лимита. Ограничение применяется к общему ожиданию одного вызова Применить.
Синтаксис:
УстановитьТипОграничения(<ТипОграничения>)Параметры:
| Имя | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
| ТипОграничения | Строка | ТипыОграниченияВызовов.ФиксированноеОкно |
см. ТипыОграниченияВызовов |
Возвращаемое значение:
Тип: СтратегияОграниченияВызовов.
Описание:
Устанавливает алгоритм выдачи разрешений. При смене типа сбрасывает счетчик текущего интервала и расписание равномерного распределения.
Синтаксис:
УстановитьОбработчикПревышенияЛимита(<Обработчик>, <ДополнительныеПараметры>)Параметры:
| Имя | Тип | Описание |
|---|---|---|
| Обработчик | Действие, Строка | Обработчик, вызываемый при превышении лимита. Строка трактуется как лямбда-выражение. Получает КонтекстПревышенияЛимита. Возвращаемое значение не используется |
| ДополнительныеПараметры | Массив, ФиксированныйМассив, Произвольный, Неопределено | Дополнительные параметры, которые будут переданы обработчику после контекста превышения лимита |
Возвращаемое значение:
Тип: СтратегияОграниченияВызовов.
Описание:
Устанавливает обработчик превышения лимита вызовов. Если заданы дополнительные параметры, они передаются после контекста превышения лимита. Подробности о лямбда-выражениях см. в руководстве.
Синтаксис:
ЛимитВызовов()Возвращаемое значение:
Тип: Число.
Описание:
Возвращает текущий лимит вызовов.
Синтаксис:
ИнтервалЛимита()Возвращаемое значение:
Тип: Число.
Описание:
Возвращает текущий интервал лимита в миллисекундах.
Синтаксис:
МаксимальноеОжиданиеРазрешения()Возвращаемое значение:
Тип: Число.
Описание:
Возвращает максимальное время ожидания разрешения в миллисекундах. Значение 0 означает отказ без ожидания.
Синтаксис:
ТипОграничения()Возвращаемое значение:
Тип: Строка.
Описание:
Возвращает текущий тип ограничения вызовов. Возможные значения описаны в ТипыОграниченияВызовов.
Синтаксис:
КоличествоВызововЗаИнтервал()Возвращаемое значение:
Тип: Число.
Описание:
Возвращает количество вызовов, уже выполненных в текущем интервале.
Синтаксис:
Сбросить()Возвращаемое значение:
Тип: СтратегияОграниченияВызовов.
Описание:
Сбрасывает текущее состояние интервала лимита.