我正在使用第三方库(rediscala)访问我自己的Actor中的Redis数据库。以下是我目前正在做的一个例子。它是否正确 ?以下代码是否存在任何潜在问题,因为我在我的actor中创建了一个akkaSystem。如果SimpleRedisClientActor
崩溃,那么我需要重新启动SimpleRedisClientActor
,这将创建另一个Actor系统。我应该覆盖preStart
和postStop
吗?
import akka.actor.{Props, Actor, ActorLogging}
import redis.RedisClient
import scala.util.{Failure, Success}
import scala.concurrent.ExecutionContext.Implicits.global
class SimpleRedisClientActor extends Actor with ActorLogging {
implicit val akkaSystem = akka.actor.ActorSystem()
val redis = RedisClient()
def receive: Receive = {
case PingRedis => {
val futurePong = redis.ping()
futurePong.onComplete{
case Success(s) => log.info("Redis replied back with a pong")
case Failure(f) => log.info("Something was wrong ...")
}
}
}
}
object RedisActorDemo extends App {
implicit val akkaSystem = akka.actor.ActorSystem()
val simpleActor = akkaSystem.actorOf(Props(classOf[SimpleRedisClientActor]))
simpleActor ! PingRedis
}
object PingRedis
答案 0 :(得分:3)
不是个好主意。 ActorSystem为actor提供运行时支持,因此您需要一个ActorSystem来创建一个actor,而不是相反。此外,启动一个ActorSystem需要大约500ms,所以你不会创建很多 - 他们是非常重量级的。相比之下,Actors非常轻巧。每个网络节点应该只有一个ActorSystem。