首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解akka hello-world示例

理解akka hello-world示例
EN

Stack Overflow用户
提问于 2016-06-13 14:46:11
回答 2查看 189关注 0票数 0

我正在学习Akka,现在我正在尝试理解它们的基本Hello-world example (片段):

代码语言:javascript
复制
public static void main(String[] args) throws TimeoutException {
    // Create the 'helloakka' actor system
    final ActorSystem system = ActorSystem.create("helloakka");

    // Create the 'greeter' actor
    final ActorRef greeter = system.actorOf(Props.create(Greeter.class), "greeter");

    // Create the "actor-in-a-box"
    final Inbox inbox = Inbox.create(system);

    // Tell the 'greeter' to change its 'greeting' message
    greeter.tell(new WhoToGreet("akka"), ActorRef.noSender());  //1 <------- Here

    // Ask the 'greeter for the latest 'greeting'
    // Reply should go to the "actor-in-a-box"
    inbox.send(greeter, new Greet());

    // Wait 5 seconds for the reply with the 'greeting' message
    Greeting greeting1 = (Greeting) inbox.receive(Duration.create(5, TimeUnit.SECONDS));
    System.out.println("Greeting: " + greeting1.message);  //2 <-------- Here

    // Change the greeting and ask for it again
    greeter.tell(new WhoToGreet("typesafe"), ActorRef.noSender());  //3 <--- Here
    inbox.send(greeter, new Greet());  
    Greeting greeting2 = (Greeting) inbox.receive(
                          Duration.create(5, TimeUnit.SECONDS));  //4 <-------------- Here
    System.out.println("Greeting: " + greeting2.message);

    //...
}

上面怎么回事?

//1,演员greeter开火-忘了给没有发送者的消息WhoToGreet("akka") .所以没有人会收到它。但是由于一些不清楚的原因,在//2,我们从演员inbox那里得到了它(greeting1)。为什么?这条消息是如何在inbox中结束的?我们没有把它寄给inbox。有点奇迹..。

//3,情况也是一样的。我们告诉noSender,然后从inbox收到.

EN

回答 2

Stack Overflow用户

发布于 2016-06-13 15:07:38

这一行命令收件箱使用对greeter参与者的问候:

代码语言:javascript
复制
// Ask the 'greeter for the latest 'greeting'
// Reply should go to the "actor-in-a-box"
inbox.send(greeter, new Greet());

在使用inbox.receive确认和检索现在放在收件箱中的消息之前,会调用它。虽然消息的目标不存在于参与者系统中,但参与者系统本身正在接收消息。

ActorRef.noSender()似乎意味着问候不是来自不同的参与者;当参与者发送消息时,这可能会更改为参与者发送消息的唯一ActorRef (因此您可以将消息跟踪到前一个参与者)。

票数 2
EN

Stack Overflow用户

发布于 2016-06-20 18:43:23

在以下几行:

代码语言:javascript
复制
greeter.tell(new WhoToGreet("akka"), ActorRef.noSender());  //1 <------- Here

“迎宾”对象正在发送消息--一个新的"WhoToGreet“对象--没有指定的发送方。问候者会收到留言的。

"noSender“的意思是,如果问候者对信息做出回应,那么回复就不会被传递--它很可能会以死信演员结束。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37792765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档