SharedMapSetter#
Помещает сообщение в разделяемый кэш. Работа с хранилищем shared map, построенном на базе Shared Memory в Nginx.
Параметры:
Название |
Обязательность |
Допустимые значения |
Описание |
|---|---|---|---|
operation |
+ |
ADD/REPLACE/INCREMENT |
Тип операции: ADD — добавление; REPLACE — замена; INCREMENT — увеличение существующего значения на заданную дельту (только для числовых значений) |
shared_store_key |
+ |
Строка, содержащая выражение из переменных и/или констант |
Обязательный параметр, задающий ключ, с которым сообщение будет помещено в кэш |
shared_store_name |
+ |
Строка, содержащая имя разделяемого хранилища |
Должно указываться имя ранее объявленного хранилища |
lifetime |
- |
Текстовое значение с суффиксом: ms — миллисекунды; s — секунды; m — минуты; h — часы; d — дни; w — недели; M — месяцы, 30 дней; y — годы, 365 дней. Может также содержать переменную |
Время жизни помещаемого в кэш значения, по истечении которого оно будет удалено |
initvalue |
- |
Используется в случае operation = INCREMENT, как начальное значение счетчика, должно быть задано либо число, либо переменная (в этом случае строка должна начинаться со знака $ и результат выполнения переменной должен содержать целое число). |
|
ignore_already_exists |
- |
Игнорировать ошибку вставки с существующим ключом. Применимо для операции PUT - по умолчанию, попытка поместить запись с ключом уже существуюшим в кэше приводит к ошибке ALREADY_EXISTS. Если установить ignore_already_exists в true, то в этом случае действие не завершится с ошибкой, однако значение в кэше не будет обновлено. В случае если необходимо обновление значений, испольуйте операцию REPLACE. |
|
Заполняемые переменные: |
Название |
Диапазон значений |
Описание |
|---|---|---|
clj_shared_map_error |
MESSAGE_UNKNOWN/DEFAULT_ERROR/ALREADY_EXISTS |
MESSAGE_UNKNOWN — попытка получить сообщение по ключу, который отсутствует в кэше; DEFAULT_ERROR — внутренняя ошибка; ALREADY_EXISTS — сообщение с таким ключом уже есть в кэше. |
Переменная заполняется только в случае ошибки.
Замечание 1: Данное действие всегда ожидает входящего сообщения. Если сообщение отсутствует или не инициализировано, то в результате выполнения действие завершится с ошибкой.
Замечание 2: Входное сообщение трактуется по-разному в зависимости от значения OPERATION. Для значений ADD и REPLACE - это значение, помещаемое в разделяемый кэш, для INCREMENT - величина инкремента (целое число).
Пример:
system:
storages:
- name: storage_1
services:
service_http_proxy:
- id: 1
chains:
- action: SharedMapSetter
conditions:
- {var: request_method, value: PUT, operator: "="}
params:
operation: ADD
shared_store_key: $arg_ID
shared_store_name: storage_1
lifetime: 1h
message: $clj_request_body
- action: SharedMapSetter
conditions:
- {var: request_method, value: POST, operator: "="}
params:
operation: REPLACE
shared_store_key: $arg_ID
shared_store_name: storage_1
lifetime: 1h
message: $clj_request_body
В примере, в зависимости от метода запроса, тело запроса помещается в кэш на 1 час, или заменяется, если оно ранее там существовало (по ключу из параметра запроса ID).
chains:
request_chains:
- message: '1'
actions:
- action: SharedMapSetter
params:
operation: INCREMENT
initValue: '0'
lifetime: 1s
shared_store_key: $request_method
shared_store_name: counter
- action: SharedMapToVars
params:
shared_store_name: counter
rules:
- operation: GET
key: $request_method
var: $clj_current_count
setWhenEmpty: true
default_empty_value: '0'
- action: ConditionChecker
conditions:
- var: $request_method
val: POST
operator: '='
params:
rules:
- var: $clj_current_count
val: '500'
operator: <
Значение счетчика инкрементируется в разрезе метода запроса, время жизни значения 1 секунда. По достижению 500 запросов в течение 1с, запросы с методом POST начинают блокироваться.