我正在使用Akka开发一个应用程序,这个问题让我整个时间都认为消息声明与 Actor
的。我应该在哪里声明消息?在接收器伴侣对象或发送者伴侣对象或第三位?
我正在使用Akka开发一个应用程序,这个问题让我整个时间都认为消息声明与 Actor
的。我应该在哪里声明消息?在接收器伴侣对象或发送者伴侣对象或第三位?
Akka团队建议Message应该在同一个地方定义 props
方法应该是: 在Receiver的Companion对象中 因为Receiver实现了 receive
部分功能,需要知道它支持的所有消息。此外,多个发件人可以发送一组邮件(由Receiver实现),因此您无法将其放在一个发件人中。
Akka团队建议Message应该在同一个地方定义 props
方法应该是: 在Receiver的Companion对象中 因为Receiver实现了 receive
部分功能,需要知道它支持的所有消息。此外,多个发件人可以发送一组邮件(由Receiver实现),因此您无法将其放在一个发件人中。
如果 官方Typesafe Activator模板激活器-akka-scala-seed 对于Akka的良好实践而言,消息应该是伴随对象的一部分,如下所示 PingActor
actor(直接从模板中复制):
package com.example
import akka.actor.{Actor, ActorLogging, Props}
class PingActor extends Actor with ActorLogging {
import PingActor._
var counter = 0
val pongActor = context.actorOf(PongActor.props, "pongActor")
def receive = {
case Initialize =>
log.info("In PingActor - starting ping-pong")
pongActor ! PingMessage("ping")
case PongActor.PongMessage(text) =>
log.info("In PingActor - received message: {}", text)
counter += 1
if (counter == 3) context.system.shutdown()
else sender() ! PingMessage("ping")
}
}
object PingActor {
val props = Props[PingActor]
case object Initialize
case class PingMessage(text: String)
}
注意 PingActor
它包含了演员所接受的所有消息(因为你可能已经注意到它没有被严格遵守 PongActor.PongMessage
也被接受,但未在伴随对象中定义 PingActor
)。
从另一个问题 如何将actor消息限制为特定类型? 该 维克多说:
通常的做法是声明Actor可以接收哪些消息 在Actor的伴侣对象中,这使得它变得非常容易 知道它能收到什么。