çalışma kodudur değildir:Neden bu inatçı aktör İşte
import akka.persistence._
import akka.actor.{Actor, ActorRef, ActorSystem, Props, ActorLogging}
class Counter extends PersistentActor with ActorLogging {
import Counter._
var state: State = new State(0)
override def receiveRecover: Receive = {
case RecoveryCompleted => println("Recovery completed.")
case SnapshotOffer(_, snapshot: State) => state = snapshot
case op: Operation => updateState(op)
}
override def persistenceId: String = "counter-persistent"
override def receiveCommand: Receive = {
case op: Operation =>
println(s"Counter receive ${op}")
persist(op) {
op => updateState(op)
}
case "print" => println(s"The current state of couter is ${state}")
case SaveSnapshotFailure(_, reason) => println(s"save snapshot failed, reason: ${reason}")
case SaveSnapshotSuccess(_) => println(s"snapshot saved")
}
def updateState(op: Operation): Unit = op match {
case Increment(n) =>
state = state.inc(n)
takeSnapshot
case Decrement(n) =>
state = state.dec(n)
takeSnapshot
}
def takeSnapshot: Unit = {
// if (state % 5 == 0) saveSnapshot()
saveSnapshot()
}
}
object Counter {
sealed trait Operation {
val count: Int
}
case class Increment(override val count: Int) extends Operation
case class Decrement(override val count: Int) extends Operation
final case class State(n: Int) {
def inc(x: Int) = State(n + x)
def dec(x: Int) = State(n - x)
}
}
object Persistent extends App {
import Counter._
val system = ActorSystem("persistent-actors")
val counter = system.actorOf(Props[Counter])
counter ! Increment(3)
counter ! Increment(5)
counter ! Decrement(3)
counter ! "print"
Thread.sleep(1000)
system.terminate()
}
Yapılandırma (dosyasına koyarak):
akka {
persistence {
journal {
plugin = "akka.persistence.journal.leveldb",
leveldb {
dir = "target/example/journal",
native = false
}
},
snapshot-store {
plugin = "akka.persistence.snapshot-store.local",
local {
dir = "target/example/snapshots"
}
}
}
}
iki kez uygulamayı çalıştırma durumu hiç de kalıcı olduğunu göstermektedir:
Recovery completed.
Counter receive Increment(3)
Counter receive Increment(5)
Counter receive Decrement(3)
The current state of couter is State(5)
snapshot saved
snapshot saved
snapshot saved
Recovery completed.
Counter receive Increment(3)
Counter receive Increment(5)
Counter receive Decrement(3)
The current state of couter is State(5)
snapshot saved
snapshot saved
snapshot saved
Neden?
Kalıcılık eklentisini yapılandırdınız mı? Hangi dergiyi kullanıyorsunuz? – manub
Çalışmıyorken karşılaştığınız sorun nedir? Lütfen, bu konuda daha fazla bilgi verin. – curious
@manub Yapılandırma şimdi gönderilmiştir. – qed