kw on
Контекстное слово — шаги пайплайна (§10.6)
Список слов: §1.4
Синтаксис
ActorMember = { Attr } ( "var" Ident ":" Type "=" Expr | "dep" Ident ":" Type
| "msg" Ident "(" [ Params ] ")" [ "->" Type ] Block
| "on" ( "activate" | "passivate" ) Block ) ;PStep = ( "respond" Expr | Expr ) [ "on" Ident ] [ "durable" | "best_effort" ] ;Suffix = "within" Binary | "retry" Binary [ "on" Type ] [ "backoff" Binary ] ;Грамматика: Прил. A
Определяется в
- 12.5 Шардированные акторы — Ключ объявляется в заголовке (sharded by имя
- 10.6 Пайплайны — Пайплайн — линейная цепочка шагов, каждый из которых выполняется на своём узле; данные передаются от узла к узлу напрямую, вызывающий получа
- 1.4 Ключевые слова — Зарезервированные (нельзя использовать как имена)
- 8.4 Цепочки — Цепочка связывает асинхронные шаги так, что выполняется либо вся цепочка, либо возвращается первая необработанная ошибка.
- 14.2 Динамическая конфигурация — dynamic Имя { … } — значения хранятся в координаторе, реплицируются на все узлы и меняются без перезапуска.
- 12.1 Объявление кластера — В программе не больше одного cluster.
- 12.3 Маршрутизация и поиск соседей — Вызов сервиса S
Примеры
@idle(ACCOUNT_IDLE)
actor Account sharded by id: AccountId {
var balance: Money = Money.zero()
@transient var hits: u64 = 0
on activate { log.debug("account {id} up") }
msg deposit(x: Money) { balance += x }
msg balance() -> Money { balance }
}
Account(id).deposit(amount)pipeline uploadPhoto(img: Image) -> PhotoId {
validate
-> Store.put(it) on storage
-> respond it.id
-> resize(it, THUMB_SIZES) on gpu
-> moderate on ml durable
-> SearchIndex.add(it)
} on_error(e, step) { Dlq.push(e, step) }Связанные диагностики
actor-not-hosted, pipeline-idempotency, respond-twice, respond-type, unknown-role, it-outside-chain, cluster-auth, cluster-decl, cluster-needs, cluster-seeds, placement-conflict, saga-without-role, service-not-served, topic-without-journal