'quota' capability для WebSocket API
Обзор
Предоставляет интерфейс для доступа по квотам. Не требует настройки (указания в списке capabilities запроса 'setup').
В мастер-домене настраивается список ключей для доступа по квотам. Каждое подключение в любой момент времени может запросить квоту, и сервер событиями сообщает о статусе квоты.
Подключение может запросить квоту, и в любой момент отказаться от нее. Система гарантирует что в пределах установленных таймаутов квоты будут предоставлены не более чем указанному количеству подключений.
В любой момент подключение может отказаться от квоты - от ожидания, или от использования после выделения.
Подключение может запросить несколько различных квот с разными ключами, и только одну квоту по конкретному ключу единовременно.
Запрос квоты
[
"quota_request",
{
"qid":"16066361-dfc0-49f6-b734-9b3dda09db22",
"key": "abc",
"timeout": 30,
"expires": 10
}
]
Обязательные поля запроса:
-
key- код существующей группы доступа по квотам.
Специфические поля запроса:
-
timeout- время ожидания квоты в секундах. Если не указано, то используется время из настройки группы, или, если там тоже нет, то значение по умолчанию - 60 секунд. -
expires- время предоставления квоты, после истечения которого, квота будет предоставлена другим запрашивающим её подключениям.
Варианты ответов
Ответ о неудаче бывает в одном из следующих случаев:
-
Сервис недоступен.
-
Ключ не найден в настройках мастер-домена.
-
Операция выделения указанной квоты уже активна для подключения.
[
"quota_request_result",
{
"qid":"16066361-dfc0-49f6-b734-9b3dda09db22",
"success":false,
"result":"error",
"errormsg":"Quota group not found",
"error_code":1501,
"error_message":"Quota group not found"
}
]
В случае успешного размещения в очереди ожидания возвращается удачный ответ
[
"quota_request_result",
{
"qid":"16066361-dfc0-49f6-b734-9b3dda09db22",
"result":"ok"
}
]
События от сервера
После удачного размещения в очереди по мере прогресса в подключение сервером будут отправляться события.
-
quota_passed - квота выдана.
-
quota_timeout - за установленное время квота не выдана. Запрос прерывается. При необходимости подключение может либо приступить к выполнению работы по квоте, либо разместить повторный запрос.
-
quota_error - произошел сбой в работе микросервисов. Запрос прерывается. При необходимости подключение может либо приступить к выполнению работы по квоте, либо разместить повторный запрос.
[
"quota_passed",
{
"key":"abc"
}
]
[
"quota_timeout",
{
"key":"abc"
}
]
После удачной выдачи квоты ожидается, что подключение после выполнения работы по квоте закроет ее, отправив запрос 'quota_release'. При этом если этого не произойдет за установленный параметром 'expires' интервал времени, то в подключение сервер отправит событие 'quota_expired', и закроет ее автоматически, предоставив ее другому подключению из очереди.
[
"quota_expired",
{
"key":"abc"
}
]
Отказ от квоты или ожидания
Отказ от квоты следует направлять после завершения выполнения работы по квоте. Запрос также может направляться и на этапе ожидания выделения квоты, тогда ожидание прекращается, запрос к сервису прерывается.
Закрытие подключения эквивалентно запросу 'quota_release'.
[
"quota_release",
{
"qid":"16066361-dfc0-49f6-b734-9b3dda09db22",
"key": "abc"
}
]
Обязательные поля запроса:
-
key- код существующей группы доступа по квотам.