原文參考:https://proto.actor/docs/context/
ProtoActor 中的 Context
Context
Proto.Actor 提供了兩種形式的 Context,一種是 RootContext,一種是 ActorContext。 這些上下文組合了不同 facets 提供的各種功能。 這兩種類型的 Context 都實現了 Spawner, Stopper, Info 和 Sender facets ,另外 ActorContext 還實現了另一些 facets。
- 注:facets 不大好翻譯,這裏保留原文。
Root Context Facets
- Spawner
- Stopper
- Info
- Sender
Actor Context Facets
- Spawner
- Stopper
- Info
- Sender
- Receiver
- Invoker
- Supervisor
Context Facets
Spawner
由 RootContext,ActorContext 實現。
提供通過給定的 Props 參數 spawn 一個新的 actor 的能力。
C#
var system = new ActorSystem();
var props = Props.FromProducer(() => new GreetingActor());
var pid = system.Root.Spawn(props);
// other actor spawning methods:
// system.Root.SpawnNamed(props, name: "greeter");
// system.Root.SpawnPrefix(props, prefix: "greet-");
Stopper
由 RootContext,ActorContext 實現。 提供立即 stop 一個 actor,或者指示一個 actor 在處理完畢當前 mailbox 消息後 stop 的能力。
C#
// 立即 stop
context.Stop(pid);
await context.StopAsync(pid);
// 處理完畢當前用戶 mailbox 中的消息後 stop
context.Poison(pid);
await context.PoisonAsync(pid);
Info
由 RootContext,ActorContext 實現。
提供對有關上下文的信息的訪問,例如當前 actor 的 Parent PID ,其自身的 Self PID,當前消息的 Sender PID, Actor 自身,以及 actor 所處位置的 ActorSystem。
Sender
由 RootContext,ActorContext 實現。
通過 actor 異步模式,提供 Send(發送後不管)消息,以及 Request 等待響應能力。
C#
var message = new MyMessage();
var request = new MyRequest();
context.Send(pid, message);
var response = context.Request<MyResponse>(pid, request);
Receiver
由 ActorContext 實現。
通過包裹在 MessageEnvelope 機制中, 提供 Receive 消息的能力。
C#
await context.Receive(envelope);
Invoker
由 ActorContext 實現。
調用提供了調用系統消息,調用用戶消息和升級故障的能力。
Invocation 提供了調用 system messages(系統消息),user messages(用戶消息),以及故障升級(escalate failures)的能力。
Supervisor
由 ActorContext 實現。
supervision 提供了在當前角色的監督下控制子角色生命週期的方法,以及將故障升級到監督層次結構中下一個角色的能力。
Supervision 提供了控制在當前 actor 監督下的 child actors 的生命週期的方法,並且有能力將故障升級到 supervision 層次等級中的下一個 actor。