actor中!(tell)与forward的差别

Posted cxchanpin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了actor中!(tell)与forward的差别相关的知识,希望对你有一定的参考价值。

! 的源代码:

def !(message: Any)(implicit sender: ActorRef = Actor.noSender): Unit

tell 的源代码:

final def tell(msg: Any, sender: ActorRef): Unit = this.!(msg)(sender)

forward 的源代码:

def forward(message: Any)(implicit context: ActorContext) = tell(message, context.sender())

通过源代码。我们能够轻而易举的知道 :

!  发送的消息的发送者通过一个隐式转换,把一个ActorRef转换成sender,假设找不到ActorRef的话。那个发送者就是noSender。

forward 发送消息的发送者是当前消息的上一个发送者。

即:

A To B, B To C

假设通过!

的方式发送消息,则C接收到的消息的发送者是B.

假设通过 forward 的方式发送消息。则C接收到的消息的发送者是A.

假设希望 !的方式发送消息的同一时候携带发送者消息,则能够使用  .!(msg)(sender)


假设希望关掉actor,直接shutdown或者使用父亲actor的stop。在actor内部还能够使用context.stop(self)

以上是关于actor中!(tell)与forward的差别的主要内容,如果未能解决你的问题,请参考以下文章

forward和sendRedirect的差别

AKKA Inbox收件箱

Actor 模型中的通信模式

Nginx 反代参数:$X-Real-Ip和$X-Forwarded-For的区别

Scala中的Akka,感叹号和问号

java+selenium+new——同一个标签窗口里 ,访问多个网页的后退driver.navigate().back()前进driver.navigate().forward()刷新drive(代