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