0
我的演員擴展akka.persistence.PersistentActor。 我想首先發送一個消息案例類SetConfig(config:String),並確保在SetConfig持久化和應用之前沒有其他消息被處理。akka執行者如何能夠保證首先接收到特定的消息?
達到此目的的最佳實踐是什麼?
我的演員擴展akka.persistence.PersistentActor。 我想首先發送一個消息案例類SetConfig(config:String),並確保在SetConfig持久化和應用之前沒有其他消息被處理。akka執行者如何能夠保證首先接收到特定的消息?
達到此目的的最佳實踐是什麼?
我會使用Akka FSM和PersistentActor
。
你可以擁有這兩個狀態:
sealed trait State
case object Idle extends State
case object Active extends State
和這樣的數據:
sealed trait Data
case object Uninitialized extends Data
final case class Config(config: String) extends Data
你的演員將擴展FSM[State, Data]
,並將:
startWith(Idle, Uninitialized)
然後你就可以說,您只接受SetConfig
消息時Idle
:
when(Idle) {
case Event(SetConfig(conf), Uninitialized) =>
goto(Active) using Config(conf)
}
,一旦你過渡到Active
您可以接收其他信息:
when(Active) {
case Event(...
// don't forget to start it up in initial state with:
initialize()
最後的狀態轉換,你可以使用常規的阿卡持久模式不改變你的狀態。