簡體   English   中英

演員消息應該在哪里宣布?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM