gpt4 book ai didi

java - 为什么akka中receiver.tell(msg, sender)而不是sender.tell(msg,receiver)?

转载 作者:行者123 更新时间:2023-12-02 01:10:36 41 4
gpt4 key购买 nike

我是 akka 的初学者。有人可以向我解释为什么 tell 方法定义如下:

receiver.tell(msg, sender);

在我看来,有人向其他人发送消息,在 OOP 中它会这样:

sender.tell(msg, receiver)

发送者向接收者传达消息

最佳答案

让我尝试用一​​个例子来解释这一点。

第 1 部分:

只需将此视为两个人之间的短信(例如 AB)。

如果A收到来自B的消息,则A是接收者B是发送者。假设,如果 A 发送一条消息,则 A 成为发送者,而 B 成为接收者

因此,发送者和接收者实际上取决于消息流的方向。两者都将充当发送者和接收者。

来看你的例子..

tell() 方法中作为第二个参数传递的 ActorRef 表示谁发送了消息,而 ActorRef 则表示谁是 tell 被调用的方法是Receiver。

一般来说,这两个地方都类似于Reciever.tell(message, sender)。但是,您可以将其称为 Sender.tell(msg, receive) 作为回复最初发送消息的 Actor 的指示。

即使你说它是Sender.tell(msg,receiver),这里Sender部分是要接收消息的部分,Receiver是 部分是实际发送消息的人(在本例中为回复)。

尝试逐行阅读并理解上面的内容,因为它可能看起来很困惑。然后继续下面的内容。

<小时/>

第 2 部分:

现在,在 Reciever.tell(message, sender) 中,发送者不必总是发送消息的人。它也可以指向其他一些 Actor 。或者,只需传递 ActorRef.noSender() 即可根本没有 Actor。

现在考虑有三个 Actor ABC。如果我从 A Actor 向 B Actor 发送一条消息,如下所示,

B.tell(message, C);

在 B 的上下文中,C 将是向 B 发送消息的人,尽管 A 是实际的发送者。因此,当您发送如下回复时,

getSender().tell(replyMsg, getSelf());

这里,getSender()方法将返回对Actor C而不是Actor A的引用。因此,Actor C将收到回复消息。

如果假设,Actor A 发送了一条完全没有发件人引用的消息,如下所示,

B.tell(message, ActorRef.noSender())

那么在 B 的上下文中,将不会有发送者。发件人未知。假设如果 B 尝试发送回复 getSender().tell(replyMsg, getSelf()),则没有用户参与者(A、B、C)会收到该消息,但会被传递给一种特殊类型的系统参与者,称为deadLetter参与者。

关于java - 为什么akka中receiver.tell(msg, sender)而不是sender.tell(msg,receiver)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59451600/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com