Documentation
¶
Overview ¶
Package actorlayer provides provider-agnostic typed actor execution primitives.
Actorlayer is product-agnostic infrastructure. It does not depend on Google ADK, Balda, Telegram, JetStream, NATS, MCP, model providers, workspace policy, queue providers, or product-specific task/projection lifecycles. Those concerns belong to adapter and product integration packages.
The package owns local actor mechanics: addressable refs, typed envelopes, per-actor mailboxes, Tell and Ask messaging, lifecycle publication, supervision, dead-letter sinks, scheduling, observer hooks, and tracing hooks. A product embeds actorlayer by translating its own commands and runtime context into actorlayer refs, envelopes, and behaviors.
Runtime providers and transports are intentionally outside this package. Local workers, ADK-backed agents, command delivery, ack/retry/deadletter settlement, telemetry shaping, and persistence side effects must be adapted at the boundary instead of being embedded in actorlayer core.
Index ¶
- Constants
- Variables
- type Actor
- type ActorFunc
- type ActorID
- type ActorRef
- type AskOption
- type Behavior
- type BoundedMailboxConfig
- type Clock
- type Config
- type Context
- type CorrelationID
- type DeadLetter
- type DeadLetterSink
- type DefaultSupervisor
- type Directive
- type Envelope
- type EnvelopeMeta
- type EventActor
- type EventActorFunc
- type Failure
- type Mailbox
- type MailboxFactory
- type MailboxFullPolicy
- type MessageID
- type NopDeadLetterSink
- type NopObserver
- func (NopObserver) OnActorSpawn(ActorID)
- func (NopObserver) OnActorStop(ActorID)
- func (NopObserver) OnAskDone(ActorID, error)
- func (NopObserver) OnAskStart(ActorID)
- func (NopObserver) OnDeadLetter(DeadLetter)
- func (NopObserver) OnReceive(ActorID, time.Duration, error, any)
- func (NopObserver) OnRestart(ActorID)
- func (NopObserver) OnTellEnqueue(ActorID)
- type NopTracer
- type Observer
- type Props
- type PublishedMessage
- type ReceiveFunc
- type Ref
- type RequestActor
- type RequestActorFunc
- type Scheduled
- type ShutdownPolicy
- type Span
- type SpawnContext
- type SpawnOption
- type Started
- type State
- type StatsObserver
- func (s *StatsObserver) OnActorSpawn(ActorID)
- func (s *StatsObserver) OnActorStop(ActorID)
- func (s *StatsObserver) OnAskDone(_ ActorID, err error)
- func (s *StatsObserver) OnAskStart(ActorID)
- func (s *StatsObserver) OnDeadLetter(DeadLetter)
- func (s *StatsObserver) OnReceive(_ ActorID, duration time.Duration, err error, panicValue any)
- func (s *StatsObserver) OnRestart(ActorID)
- func (s *StatsObserver) OnTellEnqueue(ActorID)
- func (s *StatsObserver) Snapshot() StatsSnapshot
- type StatsSnapshot
- type Stopped
- type SupervisionContext
- type SupervisorStrategy
- type System
- func (s *System) Publish(ctx context.Context, topic string, payload any) error
- func (s *System) Ref(id ActorID) Ref
- func (s *System) Shutdown(ctx context.Context) error
- func (s *System) Spawn(ctx context.Context, name string, props Props, opts ...SpawnOption) (Ref, error)
- func (s *System) Stop(ctx context.Context, ref Ref) error
- func (s *System) Subscribe(topic string, subscriber Ref) error
- func (s *System) Tell(ctx context.Context, to Ref, payload any, opts ...TellOption) (err error)
- func (s *System) TellAfter(ctx context.Context, delay time.Duration, to Ref, payload any, ...) (Scheduled, error)
- func (s *System) Unsubscribe(topic string, subscriber Ref) error
- func (s *System) Watch(_ context.Context, watcher Ref, target Ref) error
- type TellOption
- func WithCorrelationID(id CorrelationID) TellOption
- func WithDeadline(deadline time.Time) TellOption
- func WithFrom(from Ref) TellOption
- func WithHeader(key, value string) TellOption
- func WithHeaders(headers map[string]string) TellOption
- func WithMessageID(id MessageID) TellOption
- func WithReplyTo(replyTo Ref) TellOption
- type Terminated
- type ThresholdSupervisor
- type ThresholdSupervisorConfig
- type TraceAttrs
- type Tracer
- type TypedEnvelope
- type TypedProps
Examples ¶
Constants ¶
const ( // DefaultMailboxCapacity is the default in-memory mailbox capacity per actor. DefaultMailboxCapacity = 64 // DefaultAskTimeout is the default timeout used by Ask when none is provided. DefaultAskTimeout = 30 * time.Second )
const LifecycleTopic = "actor.lifecycle"
LifecycleTopic is the pub/sub topic used for actor lifecycle notifications.
Variables ¶
var ( // ErrMailboxFull indicates a bounded mailbox rejected an enqueue because it is full. ErrMailboxFull = errors.New("actorlayer: mailbox full") // ErrMailboxClosed indicates a mailbox is no longer accepting messages. ErrMailboxClosed = errors.New("actorlayer: mailbox closed") // ErrMailboxDrop indicates a mailbox drop policy discarded a message. ErrMailboxDrop = errors.New("actorlayer: message dropped") // ErrActorNotFound indicates the target actor reference is unknown to the system. ErrActorNotFound = errors.New("actorlayer: actor not found") // ErrAskTimeout indicates Ask did not receive a reply before timeout. ErrAskTimeout = errors.New("actorlayer: ask timeout") // ErrRateLimited indicates the system rejected a Tell due to rate limiting. ErrRateLimited = errors.New("actorlayer: rate limited") // ErrScheduleCanceled indicates a scheduled send was canceled before delivery. ErrScheduleCanceled = errors.New("actorlayer: scheduled delivery canceled") // ErrShuttingDown indicates the system is shutting down and not accepting new work. ErrShuttingDown = errors.New("actorlayer: shutting down") // ErrUnhandled indicates a behavior intentionally did not handle the payload. ErrUnhandled = errors.New("actorlayer: unhandled message") )
var ( // ErrMessageTypeMismatch is returned when an envelope payload does not match // the typed actor message contract. ErrMessageTypeMismatch = errors.New("actorlayer: message type mismatch") // ErrResponseTypeMismatch is returned when AskTyped receives a response // payload that does not match the requested response type. ErrResponseTypeMismatch = errors.New("actorlayer: response type mismatch") )
Functions ¶
This section is empty.
Types ¶
type Actor ¶
type Actor[M any] interface { Receive(ctx Context, env TypedEnvelope[M]) error }
Actor is a typed actor contract for one message type M.
func AdaptEventActor ¶
func AdaptEventActor[M any](eventActor EventActor[M]) Actor[M]
AdaptEventActor converts an EventActor into a generic Actor.
func AdaptRequestActor ¶
func AdaptRequestActor[Req any, Resp any](requestActor RequestActor[Req, Resp]) Actor[Req]
AdaptRequestActor converts RequestActor into Actor[Req] that replies to EnvelopeMeta.ReplyTo with the typed response when reply target is present.
type ActorFunc ¶
type ActorFunc[M any] func(ctx Context, env TypedEnvelope[M]) error
ActorFunc adapts a function into Actor[M].
type ActorID ¶
type ActorID string
ActorID is a stable local identifier for an actor within one system.
type ActorRef ¶
type ActorRef[M any] struct { // contains filtered or unexported fields }
ActorRef is a typed reference to an actor expecting message type M.
func SpawnTyped ¶
func SpawnTyped[M any](ctx context.Context, sys *System, name string, props TypedProps[M], opts ...SpawnOption) (ActorRef[M], error)
SpawnTyped creates and starts a typed actor instance.
Example ¶
package main
import (
"context"
"fmt"
"time"
"github.com/normahq/norma/v2/pkg/actorlayer"
)
type addRequest struct {
A int
B int
}
type addResponse struct {
Sum int
}
func main() {
ctx := context.Background()
sys, err := actorlayer.NewSystem(actorlayer.Config{})
if err != nil {
panic(err)
}
defer func() {
shutdownCtx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
_ = sys.Shutdown(shutdownCtx)
}()
ref, err := actorlayer.SpawnTyped[addRequest](ctx, sys, "adder", actorlayer.TypedProps[addRequest]{
NewActor: func(actorlayer.SpawnContext) (actorlayer.Actor[addRequest], error) {
return actorlayer.AdaptRequestActor[addRequest, addResponse](
actorlayer.RequestActorFunc[addRequest, addResponse](func(_ actorlayer.Context, env actorlayer.TypedEnvelope[addRequest]) (addResponse, error) {
return addResponse{Sum: env.Message.A + env.Message.B}, nil
}),
), nil
},
})
if err != nil {
panic(err)
}
resp, err := actorlayer.AskTyped[addRequest, addResponse](
ctx,
sys,
ref,
addRequest{A: 2, B: 3},
actorlayer.WithTimeout(time.Second),
)
if err != nil {
panic(err)
}
fmt.Println(resp.Message.Sum)
}
Output: 5
type AskOption ¶
type AskOption interface {
// contains filtered or unexported methods
}
AskOption configures Ask behavior and forwarded envelope metadata.
func WithAskCorrelationID ¶
func WithAskCorrelationID(id CorrelationID) AskOption
WithAskCorrelationID sets Ask forwarded envelope correlation id.
func WithAskFrom ¶
WithAskFrom sets sender reference on Ask forwarded envelope.
func WithAskHeader ¶
WithAskHeader sets one header on Ask forwarded envelope.
func WithAskHeaders ¶
WithAskHeaders merges headers on Ask forwarded envelope.
type BoundedMailboxConfig ¶
type BoundedMailboxConfig struct {
Capacity int
FullPolicy MailboxFullPolicy
}
BoundedMailboxConfig configures bounded FIFO mailbox behavior.
type Config ¶
type Config struct {
NodeID string
DefaultMailbox MailboxFactory
DeadLetters DeadLetterSink
Observer Observer
Tracer Tracer
Supervision SupervisorStrategy
Clock Clock
MaxActors int
MaxTotalQueued int
DefaultAskLimit time.Duration
TellRateLimitPerSecond int
ShutdownPolicy ShutdownPolicy
ShutdownPollInterval time.Duration
}
Config defines runtime limits and integrations for System.
type Context ¶
type Context interface {
context.Context
Self() Ref
Parent() *Ref
Sender() *Ref
Tell(ctx context.Context, to Ref, payload any, opts ...TellOption) error
TellAfter(ctx context.Context, delay time.Duration, to Ref, payload any, opts ...TellOption) (Scheduled, error)
Ask(ctx context.Context, to Ref, payload any, opts ...AskOption) (Envelope, error)
Spawn(ctx context.Context, name string, props Props, opts ...SpawnOption) (Ref, error)
Stop(ctx context.Context, ref Ref) error
Watch(ctx context.Context, ref Ref) error
State() State
Publish(ctx context.Context, topic string, payload any) error
}
Context provides actor-local execution context for message handling.
type CorrelationID ¶
type CorrelationID string
CorrelationID groups related envelopes across exchanges.
type DeadLetter ¶
DeadLetter describes a delivery that could not be completed.
type DeadLetterSink ¶
type DeadLetterSink interface {
HandleDeadLetter(ctx context.Context, letter DeadLetter)
}
DeadLetterSink consumes failed delivery records.
type DefaultSupervisor ¶
type DefaultSupervisor struct{}
DefaultSupervisor provides conservative failure handling defaults.
func (DefaultSupervisor) Decide ¶
func (DefaultSupervisor) Decide(_ SupervisionContext, failure Failure) Directive
Decide chooses a directive based on panic/error class.
type Envelope ¶
type Envelope struct {
ID MessageID
CorrelationID CorrelationID
To Ref
From Ref
ReplyTo *Ref
Headers map[string]string
Payload any
Deadline time.Time
SentAt time.Time
}
Envelope is the transport unit placed in actor mailboxes.
func Ask ¶
func Ask(ctx context.Context, sys *System, to Ref, payload any, opts ...AskOption) (resp Envelope, err error)
Ask sends a message and waits for a reply envelope.
Example ¶
package main
import (
"context"
"fmt"
"time"
"github.com/normahq/norma/v2/pkg/actorlayer"
)
func main() {
ctx := context.Background()
sys, err := actorlayer.NewSystem(actorlayer.Config{})
if err != nil {
panic(err)
}
defer func() {
shutdownCtx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
_ = sys.Shutdown(shutdownCtx)
}()
echoRef, err := sys.Spawn(ctx, "echo", actorlayer.Props{
NewBehavior: func(actorlayer.SpawnContext) (actorlayer.Behavior, error) {
return actorlayer.ReceiveFunc(func(c actorlayer.Context, env actorlayer.Envelope) error {
if env.ReplyTo == nil {
return nil
}
return c.Tell(c, *env.ReplyTo, fmt.Sprintf("echo:%v", env.Payload))
}), nil
},
})
if err != nil {
panic(err)
}
reply, err := actorlayer.Ask(ctx, sys, echoRef, "ping", actorlayer.WithTimeout(time.Second))
if err != nil {
panic(err)
}
fmt.Println(reply.Payload)
}
Output: echo:ping
type EnvelopeMeta ¶
type EnvelopeMeta struct {
ID MessageID
CorrelationID CorrelationID
To Ref
From Ref
ReplyTo *Ref
Headers map[string]string
Deadline time.Time
SentAt time.Time
}
EnvelopeMeta carries transport/runtime metadata for a typed envelope.
type EventActor ¶
type EventActor[M any] interface { OnEvent(ctx Context, env TypedEnvelope[M]) error }
EventActor is a semantic actor type for one-way event handling.
type EventActorFunc ¶
type EventActorFunc[M any] func(ctx Context, env TypedEnvelope[M]) error
EventActorFunc adapts a function into EventActor[M].
func (EventActorFunc[M]) OnEvent ¶
func (f EventActorFunc[M]) OnEvent(ctx Context, env TypedEnvelope[M]) error
OnEvent executes the wrapped function.
type Mailbox ¶
type Mailbox interface {
Enqueue(ctx context.Context, env Envelope) error
Dequeue(ctx context.Context) (Envelope, error)
Len() int
Close() error
}
Mailbox is the actor queue abstraction used by each actor cell.
type MailboxFactory ¶
MailboxFactory creates a mailbox instance for a specific actor.
func NewBoundedMailboxFactory ¶
func NewBoundedMailboxFactory(cfg BoundedMailboxConfig) MailboxFactory
NewBoundedMailboxFactory returns a mailbox factory backed by bounded in-memory channels.
type MailboxFullPolicy ¶
type MailboxFullPolicy int
MailboxFullPolicy defines behavior when enqueue is attempted on a full mailbox.
const ( // FailFast returns ErrMailboxFull when the mailbox is full. FailFast MailboxFullPolicy = iota // BlockUntilSpace blocks until space is available or context closes. BlockUntilSpace // DropNewest discards the new message when the mailbox is full. DropNewest // DropOldest removes one queued message and enqueues the new message. DropOldest )
type NopDeadLetterSink ¶
type NopDeadLetterSink struct{}
NopDeadLetterSink ignores all dead letters.
func (NopDeadLetterSink) HandleDeadLetter ¶
func (NopDeadLetterSink) HandleDeadLetter(_ context.Context, _ DeadLetter)
HandleDeadLetter discards the dead letter.
type NopObserver ¶
type NopObserver struct{}
NopObserver is a no-op Observer implementation.
func (NopObserver) OnActorSpawn ¶
func (NopObserver) OnActorSpawn(ActorID)
OnActorSpawn records actor spawn events.
func (NopObserver) OnActorStop ¶
func (NopObserver) OnActorStop(ActorID)
OnActorStop records actor stop events.
func (NopObserver) OnAskDone ¶
func (NopObserver) OnAskDone(ActorID, error)
OnAskDone records Ask completion events.
func (NopObserver) OnAskStart ¶
func (NopObserver) OnAskStart(ActorID)
OnAskStart records Ask start events.
func (NopObserver) OnDeadLetter ¶
func (NopObserver) OnDeadLetter(DeadLetter)
OnDeadLetter records dead-letter events.
func (NopObserver) OnRestart ¶
func (NopObserver) OnRestart(ActorID)
OnRestart records actor restart events.
func (NopObserver) OnTellEnqueue ¶
func (NopObserver) OnTellEnqueue(ActorID)
OnTellEnqueue records Tell enqueue events.
type Observer ¶
type Observer interface {
OnActorSpawn(actorID ActorID)
OnActorStop(actorID ActorID)
OnTellEnqueue(actorID ActorID)
OnAskStart(actorID ActorID)
OnAskDone(actorID ActorID, err error)
OnReceive(actorID ActorID, duration time.Duration, err error, panicValue any)
OnRestart(actorID ActorID)
OnDeadLetter(letter DeadLetter)
}
Observer receives runtime lifecycle and messaging callbacks from System.
type Props ¶
type Props struct {
Kind string
NewBehavior func(ctx SpawnContext) (Behavior, error)
Mailbox MailboxFactory
Supervisor SupervisorStrategy
}
Props configures actor behavior construction and runtime policy.
type PublishedMessage ¶
PublishedMessage wraps topic broadcasts delivered to subscribers.
type ReceiveFunc ¶
ReceiveFunc adapts a function into a Behavior.
type Ref ¶
type Ref struct {
// contains filtered or unexported fields
}
Ref is an addressable reference to an actor.
type RequestActor ¶
type RequestActor[Req any, Resp any] interface { Handle(ctx Context, env TypedEnvelope[Req]) (Resp, error) }
RequestActor is a semantic actor type for request-response workflows.
type RequestActorFunc ¶
type RequestActorFunc[Req any, Resp any] func(ctx Context, env TypedEnvelope[Req]) (Resp, error)
RequestActorFunc adapts a function into RequestActor[Req, Resp].
func (RequestActorFunc[Req, Resp]) Handle ¶
func (f RequestActorFunc[Req, Resp]) Handle(ctx Context, env TypedEnvelope[Req]) (Resp, error)
Handle executes the wrapped function.
type Scheduled ¶
type Scheduled interface {
// Cancel stops the scheduled delivery if it has not fired yet.
Cancel() bool
// Done is closed when scheduling completes, returning the final send result.
Done() <-chan error
}
Scheduled represents a delayed message delivery.
type ShutdownPolicy ¶
type ShutdownPolicy int
ShutdownPolicy controls how Shutdown waits for in-flight work.
const ( // ShutdownImmediate cancels actors immediately. ShutdownImmediate ShutdownPolicy = iota // ShutdownDrain waits until actors become idle before canceling. ShutdownDrain )
type Span ¶
type Span interface {
AddEvent(name string, attrs TraceAttrs)
End(err error)
}
Span captures a traced operation.
type SpawnContext ¶
SpawnContext contains immutable context available while creating behavior.
type SpawnOption ¶
type SpawnOption interface {
// contains filtered or unexported methods
}
SpawnOption configures Spawn behavior.
func WithActorID ¶
func WithActorID(id string) SpawnOption
WithActorID sets an explicit actor id instead of generated id.
type Started ¶
type Started struct {
Actor Ref
}
Started is emitted when an actor cell is created and registered.
type StatsObserver ¶
type StatsObserver struct {
// contains filtered or unexported fields
}
StatsObserver accumulates runtime counters and durations.
func (*StatsObserver) OnActorSpawn ¶
func (s *StatsObserver) OnActorSpawn(ActorID)
OnActorSpawn increments the actor spawn counter.
func (*StatsObserver) OnActorStop ¶
func (s *StatsObserver) OnActorStop(ActorID)
OnActorStop increments the actor stop counter.
func (*StatsObserver) OnAskDone ¶
func (s *StatsObserver) OnAskDone(_ ActorID, err error)
OnAskDone increments the ask-failure counter for failed asks.
func (*StatsObserver) OnAskStart ¶
func (s *StatsObserver) OnAskStart(ActorID)
OnAskStart increments the ask-start counter.
func (*StatsObserver) OnDeadLetter ¶
func (s *StatsObserver) OnDeadLetter(DeadLetter)
OnDeadLetter increments the dead-letter counter.
func (*StatsObserver) OnRestart ¶
func (s *StatsObserver) OnRestart(ActorID)
OnRestart increments the restart counter.
func (*StatsObserver) OnTellEnqueue ¶
func (s *StatsObserver) OnTellEnqueue(ActorID)
OnTellEnqueue increments the enqueue counter.
func (*StatsObserver) Snapshot ¶
func (s *StatsObserver) Snapshot() StatsSnapshot
Snapshot returns a point-in-time copy of collected stats.
type StatsSnapshot ¶
type StatsSnapshot struct {
ActorSpawns int64
ActorStops int64
TellEnqueues int64
AskStarts int64
AskFailures int64
Receives int64
ReceiveFailures int64
ReceivePanics int64
Restarts int64
DeadLetters int64
ReceiveDurTotal time.Duration
}
StatsSnapshot contains cumulative counters collected by StatsObserver.
type SupervisionContext ¶
type SupervisionContext struct {
System *System
}
SupervisionContext contains runtime context for supervisor decisions.
type SupervisorStrategy ¶
type SupervisorStrategy interface {
Decide(ctx SupervisionContext, failure Failure) Directive
}
SupervisorStrategy decides actor action for a message failure.
type System ¶
type System struct {
// contains filtered or unexported fields
}
System hosts actor cells, routing, and runtime controls.
func (*System) Spawn ¶
func (s *System) Spawn(ctx context.Context, name string, props Props, opts ...SpawnOption) (Ref, error)
Spawn creates and starts a new actor instance.
func (*System) Subscribe ¶
Subscribe registers an actor to receive PublishedMessage values for a topic.
func (*System) TellAfter ¶
func (s *System) TellAfter(ctx context.Context, delay time.Duration, to Ref, payload any, opts ...TellOption) (Scheduled, error)
TellAfter schedules a Tell delivery after delay.
func (*System) Unsubscribe ¶
Unsubscribe removes an actor subscription for a topic.
type TellOption ¶
type TellOption interface {
// contains filtered or unexported methods
}
TellOption configures Tell delivery metadata.
func WithCorrelationID ¶
func WithCorrelationID(id CorrelationID) TellOption
WithCorrelationID sets envelope correlation id.
func WithDeadline ¶
func WithDeadline(deadline time.Time) TellOption
WithDeadline sets envelope processing deadline.
func WithFrom ¶
func WithFrom(from Ref) TellOption
WithFrom sets the sender reference on an outgoing envelope.
func WithHeader ¶
func WithHeader(key, value string) TellOption
WithHeader sets one envelope header entry.
func WithHeaders ¶
func WithHeaders(headers map[string]string) TellOption
WithHeaders merges envelope header entries.
func WithMessageID ¶
func WithMessageID(id MessageID) TellOption
WithMessageID sets envelope message id.
func WithReplyTo ¶
func WithReplyTo(replyTo Ref) TellOption
WithReplyTo sets the reply target reference on an outgoing envelope.
type Terminated ¶
type Terminated struct {
ActorID ActorID
}
Terminated is sent to watchers after an actor fully exits.
type ThresholdSupervisor ¶
type ThresholdSupervisor struct {
// contains filtered or unexported fields
}
ThresholdSupervisor escalates or stops an actor after too many restart-worthy failures within the configured time window.
func NewThresholdSupervisor ¶
func NewThresholdSupervisor(cfg ThresholdSupervisorConfig) *ThresholdSupervisor
NewThresholdSupervisor returns a supervisor that limits restart bursts.
func (*ThresholdSupervisor) Decide ¶
func (s *ThresholdSupervisor) Decide(ctx SupervisionContext, failure Failure) Directive
Decide applies the base strategy and enforces restart thresholds.
type ThresholdSupervisorConfig ¶
type ThresholdSupervisorConfig struct {
Base SupervisorStrategy
MaxRestarts int
Window time.Duration
OnExceeded Directive
}
ThresholdSupervisorConfig configures restart-threshold based supervision.
type TraceAttrs ¶
TraceAttrs is a lightweight attribute map for tracing spans and events.
type Tracer ¶
type Tracer interface {
Start(ctx context.Context, name string, attrs TraceAttrs) (context.Context, Span)
}
Tracer starts spans for actorlayer operations.
type TypedEnvelope ¶
type TypedEnvelope[M any] struct { Meta EnvelopeMeta Message M }
TypedEnvelope is the typed message envelope presented to Actor[M].
type TypedProps ¶
type TypedProps[M any] struct { Kind string NewActor func(ctx SpawnContext) (Actor[M], error) Mailbox MailboxFactory Supervisor SupervisorStrategy }
TypedProps configures a typed actor spawn.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package engine provides a provider-neutral durable-delivery runtime core for actorlayer dispatch.
|
Package engine provides a provider-neutral durable-delivery runtime core for actorlayer dispatch. |
|
Package persistence contains optional interfaces for persistent actor mailboxes and actor state stores.
|
Package persistence contains optional interfaces for persistent actor mailboxes and actor state stores. |