AkkaInbox.create(actorsystem)实际上是做什么的?它会像我们在系统上创建收件箱一样为所有参与者创建一个新邮箱吗?有什么作用inbox.watch(actorref)?
你能解释一下是什么inbox.send和inbox.receive实际做什么吗?
从源代码为Inbox:
/**
* An Inbox is an actor-like object which is interrogated from the outside.
* It contains an actor whose reference can be passed to other actors as
* usual and it can watch other actors’ lifecycle.
*/
Run Code Online (Sandbox Code Playgroud)
该Inbox目的是用来自外部的演员演员进行通信的一种方式。假设我们想向名为 的actor 发送消息并接收来自actor 的回复myActor,并且我们希望从actor 外部执行此操作。(以下代码示例改编自文档。)
// this code is not inside an actor
ActorRef myActor = ???
final Inbox inbox = Inbox.create(system);
inbox.send(myActor, "ping");
Run Code Online (Sandbox Code Playgroud)
Inbox.create(system)在幕后创建一个系统级演员。inbox.send(myActor, "ping");将消息发送"ping"到myActorwithInbox的内部参与者作为发送者。因为Inbox的actor 是发送者,所以它可以从myActorwith得到回复inbox.receive:
try {
assert inbox.receive(Duration.create(1, TimeUnit.SECONDS)).equals("pong");
} catch (java.util.concurrent.TimeoutException e) {
// timeout
}
Run Code Online (Sandbox Code Playgroud)
inbox.watch注册Inbox要通过DeathWatch何时myActor终止通知的参与者:
inbox.watch(myActor);
myActor.tell(PoisonPill.getInstance(), ActorRef.noSender());
try {
assert inbox.receive(Duration.create(1, TimeUnit.SECONDS)) instanceof Terminated;
} catch (java.util.concurrent.TimeoutException e) {
// timeout
}
Run Code Online (Sandbox Code Playgroud)
Inbox.create(system)并没有创建系统中的所有演员一个新的邮箱。不要让“收件箱”这个词让你感到困惑。此外,Akka 默认启用一个调度程序,为每个参与者创建一个邮箱;该Inbox对象不改变这一点。
| 归档时间: |
|
| 查看次数: |
764 次 |
| 最近记录: |