我正在開發使用阿卡的應用程序,以及一個東西那種蟲子我的全部時間視使用Actor
的消息聲明。我應該在哪裏申報消息?在收件人伴侶對象或發件人伴侶對象中還是在某個第三位?應該在哪裏宣佈actor消息?
回答
的阿卡組建議消息應該在同一個地方props
方法應該是被定義:in the Receiver's Companion object因爲接收機實現receive
部分功能和需要知道所有其支持的消息。另外,多個發件人可以發送一組消息(由Receiver實現),因此您不能將其放入單個發件人。
如果the official Typesafe Activator template activator-akka-scala-seed是關於阿卡的良好做法的信息應儘可能表現在以下PingActor
演員(直接從模板複製)同伴對象的一部分的任何重要性:
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
中定義)。
從另一個問題How to restrict actor messages to specific types?的Viktor said:
通常的做法是宣佈什麼消息的演員可以在演員的同伴對象,這使得它非常容易 知道接收 什麼它可以接收。
其實這個例子表明消息類型可以(重新)用於不同的角色。將_command_消息放入接收actor的伴侶對象和其他地方的_event_消息可能是一個好習慣嗎?這裏'PingMessage'不應該**在'PingActor'伴隨對象中,因爲這個actor不會收到這個消息。正確的地方是「PongActor」的伴侶對象。 'PongMessage'應該在接收'PingActor'伴侶對象中。但它是事件 - 可以定義在一箇中立的對象中,也可以由其他演員發出。 – Sebastian
@塞巴斯蒂安對我的口味聽起來有些複雜。如果有人問你:「這裏的」你不能馬上回答 - 讓我們用簡單的規則在這裏「中的伴侶」很容易記住,而且是有道理的,因爲它是「誰瞭解他們的傢伙」,想想它像這是「這是傢伙*協議*」。 –
@ Konrad'ktoso'Malawski我喜歡您的評論3件事情:1公約,協議2和3治療對象/演員像活物_talking_彼此。但最初的問題是:我應該在哪裏宣佈消息?在接收器伴侶對象或發件人伴侶對象中?_對不起,如果我太嚴格了,但在上面的例子中,應該聲明「PingMessage」和「PongMessage」的伴隨對象並不明顯。接收的'PongActor'應該按照慣例理解他的_protocol_中的'PingMessage',不是嗎? ;-) – Sebastian
- 1. UIAlertView:取消按鈕應該在哪裏?
- 2. 在木偶,在哪個節點應該我宣佈puppetlabs-AWS類?
- 3. ELOG消息在哪裏?
- 4. 在這裏宣佈什麼?
- 5. omniauth.rb應該放在哪裏?
- 6. beans.xml應該放在哪裏?
- 7. 應該在哪裏工作?
- 8. gradle.jar應該放在哪裏?
- 9. startup.m應該在哪裏?
- 10. ViewModels應該放在哪裏?
- 11. PHP:我應該在哪裏存儲信息和警告信息
- 12. 角1.2我在哪裏宣佈錯了?工廠沒有定義
- 13. 在哪裏宣佈微調項目的數組
- 14. 宣佈這些變量的適當位置在哪裏?
- 15. 佈局函數應該放在Angular應用程序中哪裏?
- 16. jQuery在哪裏發送錯誤消息?
- 17. 閃存消息存儲在哪裏?
- 18. EventLogReader和EventRecord:消息在哪裏?
- 19. Outlook在哪裏保存我的消息?
- 20. Rails中的flash消息在哪裏?
- 21. 把jQuery消息放在哪裏?
- 22. akka在哪裏處理消息?
- 23. Azure Event Hub消息存儲在哪裏?
- 24. 我過期的JMS消息在哪裏?
- 25. 我的日誌消息在哪裏?
- 26. SpringIntegration中丟棄的消息在哪裏?
- 27. Defaut ParticleApplication的消息在哪裏?
- 28. 消息應該存在
- 29. 我在這裏宣佈什麼錯了?
- 30. 應該在哪裏應用AsNoTracking?
能否請您擴大*「的阿卡團隊建議」 *?一個網頁將是適當的。 –
我們做推薦這種:-)增加了一個鏈接到文檔到Soumya的答案=> http://doc.akka.io/docs/akka/2.3.8/scala/actors.html#recommended-practices –
感謝康拉德! –