Общая идея состоит в том, чтобы реализовать поведение sync.Mutex на основе http вызова и через redis. Для этого используется библиотека redsync.
Модуль имеет два вызова
- isp-lock-service/lock
- входящий запрос
- key - строка, описывающая, что мы блокируем. ОБЯЗАТЕЛЬНОЕ
- ttlInSec - число секунд после которых блокировка снимется автоматически. Если не передано, то будет использовано значение из конфига (.redis.defaultTimeOut). . ОБЯЗАТЕЛЬНОЕ
- ответ
- lockKey - строка. ключ для разблокировки, чтобы тот, кто не ставил блокировку не мог ее снять
POST {{proto}}://{{address}}/api/isp-lock-service/lock
Content-Type: application/json
X-Application-Token: {{token}}
{
"key": "abc",
"ttlInSec": 20
}
{
"lockKey": "Km1wmwaP3eKzqLbuEd46lQ=="
}
- isp-lock-service/unlock
- входящий запрос
- key - строка, описывающая, что мы разблокируем. ОБЯЗАТЕЛЬНОЕ
- lockKey - строка, ключ для разблокировки, полученный в ответ при блокировке. ОБЯЗАТЕЛЬНОЕ
- ответ
- пустой
POST {{proto}}://{{address}}/api/isp-lock-service/unlock
Content-Type: application/json
X-Application-Token: {{token}}
{
"key": "abc",
"lockKey": "{{lockKey}}"
}
{
}