Можно сохранить глобальное состояние внутри действий OpenWhisk, и это работает для Golang функций. Например, вот функция counter.go
, которая увеличивает глобальный счетчик для каждого вызова функции.
package main
var counter = 1
func Main(args map[string]interface{}) map[string]interface{} {
msg := make(map[string]interface{})
msg["counter"] = counter
counter = counter + 1
return msg
}
Если вы создадите это действие и выполните его несколько раз подряд, вы увидите, что значение счетчика увеличивается каждый раз.
> wsk action create counter counter.go
> wsk action invoke counter --result
{
"counter": 1
}
> wsk action invoke counter --result
{
"counter": 2
}
> wsk action invoke counter --result
{
"counter": 3
}
Так что то, что вы пытаетесь сделать, должно работать. В вашем примере убедитесь, что действие завершается успешно, а не выдает ошибку и происходит сбой (что предотвращает дальнейшее повторное использование). Кроме того, проверьте запись активации, чтобы увидеть, была ли активация теплой или холодной. Это можно увидеть, проверив, есть ли в записи активации аннотация initTime
, указывающая на холодный запуск. Если нет, активация активна, и новейшая активация выполнялась в том же контексте, что и предыдущая активация.