我正在尝试使用以下代码制作一个小的Akka示例:
class Sender extends Actor {
@volatile var numEchoes = 0
def receive = {
case Echo => {
numEchoes += 1
println(numEchoes)
if(numEchoes < Main.NUMBER_OF_ECHOES) {
println("Heard an echo...")
}
else {
// all echoes have been received.
println("All echoes heard.")
context.system.terminate
}
}
}
}
此演员将收到来自多个Echo
演员的Receiver
条消息:
class Receiver extends Actor {
def receive = {
case Echo => sender ! Echo
}
}
但是,numEchoes
始终打印出1
。如果我做错了什么,我会期待0
,但这个值让我相信其他东西在这里发挥作用,但我无法弄清楚它是什么。
其余的代码只是向这个特定的actor发送一定数量的消息(假设为10)。我看到Heard an echo...
打印出10次,但此变量的值不会改变。
答案 0 :(得分:0)
@wheaties是正确的。由于一些迟到的粗心复制粘贴,错误发生在Main对象中...当我创建1个Sender
和10个Receiver
个actor时,这就是我正在使用的代码:
// Create the actor that will send out the messages
val sender = actorSystem.actorOf(Props[Sender], "sender")
var actorList = List[ActorRef]()
for(i <- 1 to NUMBER_OF_ECHOES) {
val receiver = actorSystem.actorOf(Props[Sender], "receiver"+i)
actorList ::= receiver
}
当然,创建接收器作为发件人是完全错误的,所以我所要做的就是解决错误并正确地产生演员:
// Create the actor that will send out the messages
val sender = actorSystem.actorOf(Props[Sender], "sender")
var actorList = List[ActorRef]()
for(i <- 1 to NUMBER_OF_ECHOES) {
val receiver = actorSystem.actorOf(Props[Receiver], "receiver"+i)
actorList ::= receiver
}