我对Akka比较新,无法在参考手册中找到答案。
假设我们有远程Actor分布在由3台机器(A、B、C)组成的集群中,其中一台机器上有一个Actor,其他机器有ActorRef指向另外两台机器上的Actor,即:
Machine A:
A (real actor)
-> B (ref)
-> C (ref)
Machine B:
-> A (ref)
B (real actor)
-> C (ref)
Machine C:
-> A (ref)
-> B (ref)
C (real actor)
演员A执行了以下代码:
bRef ! msg1
bRef ! msg2
Actor B 在消息处理程序中执行以下代码:
case msg1 =>
cRef ! msg3
aRef ! msg4
Actor C在消息处理程序中执行以下代码:
case msg3 =>
aRef ! msg5
我能做出如下的假设(如果有的话):
演员B在收到msg2之前会先收到msg1
演员A在收到msg4之前会先收到msg5
接下来的问题可能会帮助理解上述内容: 通过!运算符发送的消息是否真正异步地通过网络发送,还是等待接收邮箱收到它才会发送? 即下面的代码行:
bRef ! msg1
阻塞直到Actor B在其邮箱中收到消息或者它生成了处理传递的线程并继续执行。
bRef ! msg2
即使 Actor B 收到了 msg1,Actor A 还没有意识到这一点,是吗?
!!
是什么意思,或者提供一个关于它的 Akka 文档页面的链接吗?显然它像?
一样等待,但我在谷歌上或者 Akka 源代码中找不到任何相关信息。 - chbrown