[英]Where should actor messages be declared?
我正在使用Akka開發一個應用程序,這個問題讓我一直認為我和Actor
的消息聲明一樣。 我應該在哪里聲明消息? 在接收器伴侶對象或發送者伴侶對象或第三位?
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
包含PingActor
所有接受的消息(因為您可能已經注意到它沒有嚴格遵循,因為PongActor.PongMessage
也被接受,但未在伴隨對象PingActor
定義)。
從另一個問題如何將演員消息限制為特定類型? 在 尤說 :
通常的做法是聲明Actor可以在Actor的伴隨對象中接收哪些消息,這使得更容易知道它可以接收什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.