Akka' s Inbox.create(actorsystem)
实际上做了什么?它是否会为我们在系统上创建收件箱的所有演员创建一个新邮箱? inbox.watch(actorref)
做了什么?
您能解释一下inbox.send
和inbox.receive
实际上做了什么吗?
答案 0 :(得分:3)
来自/**
* 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.
*/
的{{3}}:
Inbox
myActor
对象是一种与演员之外的演员进行交流的方式。假设我们想要发送消息并接收来自名为// this code is not inside an actor
ActorRef myActor = ???
final Inbox inbox = Inbox.create(system);
inbox.send(myActor, "ping");
的actor的回复,我们希望从actor外部执行此操作。 (以下代码示例改编自source code。)
Inbox.create(system)
inbox.send(myActor, "ping");
创建了一个系统级的actor。 "ping"
将myActor
邮件Inbox
发送给Inbox
,其中myActor
的内部角色作为发件人。由于inbox.receive
的演员是发件人,因此try {
assert inbox.receive(Duration.create(1, TimeUnit.SECONDS)).equals("pong");
} catch (java.util.concurrent.TimeoutException e) {
// timeout
}
可以inbox.watch
收到回复:
Inbox
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
}
的演员,以便在Inbox.create(system)
被终止时通过documentation收到通知:
Inbox
//generate a health bean dynamically, and register it
@PostConstruct
public void init(){
solrhealth = new SolrHealthIndicator(solr);
//context.??
}
不为系统中的所有参与者创建新邮箱。不要让“收件箱”这个词让你感到困惑。此外,Akka默认启用DeathWatch
,每个actor创建一个邮箱; sudo apt-get install qtbase5-dev
对象不会改变它。