'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
- код существующей группы доступа по квотам.