SharedMapToVars#

Действие SharedMapToVars позволяет помещать значения из разделяемого кэша в переменную, ассоциированную с пришедшим запросом. Работа с хранилищем shared map, построенном на базе Shared Memory в Nginx.

Параметры:

Название

Обязательность

Допустимые значения

Описание

operation

-

GET/GET_FIRST/GET_LAST.
Значение по умолчанию: GET.

Тип операции в случае, если операция не определена в правиле:
GET - получение по ключу;
GET_FIRST - получение первого по дате/времени вставки;
GET_LAST - получение последнего по дате/времени вставки. Используется по умолчанию, если операция не задана в правиле.

shared_store_name

+

Строка, содержащая имя разделяемого хранилища

Должно указываться имя ранее объявленного хранилища

rules

+

Список правил вида:
{var: имя_переменной,
key: ключ,
operation: GET/GET_FIRST/GET_LAST;
setwhenempty: true/false,
default_empty_value: значение_параметра}

key: ключ элемента в случае операции GET. Параметр обязателен в случае operation == GET;
var: имя переменной, в которую помещается значение;
operation: GET/GET_FIRST/GET_LAST. Значение по умолчанию: GET;
setwhenempty: если хранилище shared map является пустым (запросов на сервис еще не было), то при значении флага false в момент выполнения действия SharedMapToVars заданное значение переменной не будет затираться. В ином случае, переменная примет значение пустой строки "". Значение флага по умолчанию: false;
default_empty_value: параметр содержит значение, которое будет установлено в случае отсутствия значения при обращении к элементу памяти. Используется в случае: setwhenempty: true.

"Верхнеуровневый" параметр operation используется для всех параметров rules (даже если не указан явно). Если в каком-либо параметре rules определен свой "низкоуровневый" параметр operation, то его значение будет затирать значение "верхнеуровневого" для данного параметра rules.

Заполняемые переменные:

Название

Диапазон значений

Описание

clj_shared_map_error

MESSAGE_UNKNOWN/DEFAULT_ERROR/EMPTY_QUEUE/ALREADY_EXISTS

MESSAGE_UNKNOWN - попытка получить сообщение по ключу, который отсутствует в кэше; DEFAULT_ERROR - внутренняя ошибка; EMPTY_QUEUE - очередь/кэш пуст; ALREADY_EXISTS - сообщение с таким ключом уже есть в кэше

Переменная заполняется только в случае ошибки.

Пример:

system:
  storages:
    - name: storage_1
services:
 service_http_proxy:
  - id: 1
    chains:
      - action: SharedMapToVars
        conditions:
         - {var: request_method, value: GET, operator: "="}
        params:
          shared_store_name: storage_1
          operation: GET
          rules:
             - {var: $clj_last_request_uri, key: last_request_uri}
             - {var: $clj_last_remote_addr, key: last_client_addr}
             - key: counter_{{ counter_name_template }}
             - operation: GET_FIRST
               var: $clj_current_count_{{ counter_name_template }}
               setwhenempty: true
               default_empty_value: 'my_value'

В примере, в зависимости от метода запроса и значения параметра type из кэша извлекается сообщение по ключам last_request_uri или last_client_addr и помещаются в соответствующие переменные.