首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从键入的akka行为创建RedisClient

从键入的akka行为创建RedisClient
EN

Stack Overflow用户
提问于 2021-05-25 09:59:53
回答 1查看 274关注 0票数 0

我试图使用这个scala库艾蒂,它在创建它的RedisClient对象时需要一个隐式akka.actor.ActorSystem。我在Behaviors.setup方法中使用了Behaviors.setup来提供所需的隐式。

这是我的密码

代码语言:javascript
复制
def apply(): Behavior[Command] = Behaviors.setup { context =>
    implicit val system  = context.system
    implicit val classic  = context.system.classicSystem

   lazy val redis  = RedisClient(
      host = host,
      port = port
    )

但是,我在日志中得到了这个错误。

代码语言:javascript
复制
java.lang.UnsupportedOperationException: cannot create top-level actor [RedisClient-$a] from the outside on ActorSystem with custom user guardian
    at akka.actor.ActorSystemImpl.actorOf(ActorSystem.scala:895)
    at redis.RedisClientActorLike.<init>(Redis.scala:41)
    at redis.RedisClient.<init>(Redis.scala:86)
    at ng.logicbud.deidara.core.db.redis.RedisDbService$.redis$lzycompute$1(RedisDbService.scala:34)
    at ng.logicbud.deidara.core.db.redis.RedisDbService$.redis$1(RedisDbService.scala:34)
    at ng.logicbud.deidara.core.db.redis.RedisDbService$.$anonfun$apply$2(RedisDbService.scala:62)
    at akka.actor.typed.internal.BehaviorImpl$ReceiveMessageBehavior.receive(BehaviorImpl.scala:152)
    at akka.actor.typed.Behavior$.interpret(Behavior.scala:274)
    at akka.actor.typed.Behavior$.interpretMessage(Behavior.scala:230)
    at akka.actor.typed.internal.adapter.ActorAdapter.handleMessage(ActorAdapter.scala:129)
    at akka.actor.typed.internal.adapter.ActorAdapter.aroundReceive(ActorAdapter.scala:106)
    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:577)
    at akka.actor.ActorCell.invoke(ActorCell.scala:547)
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:270)
    at akka.dispatch.Mailbox.run(Mailbox.scala:231)
    at akka.dispatch.Mailbox.exec(Mailbox.scala:243)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-28 14:19:57

这是因为redis客户端希望在/user下创建一个顶级的参与者,这在类型化的参与者系统中是不可能的,因为在那里,/user参与者是您的,并且唯一被允许生成该参与者的子角色的是它自己。

应该更新etaty库,使其不需要这样做(例如,返回一个要启动的参与者,或者使用systemActorOf启动自己的内部参与者)。但是,您可以通过在应用程序中使用一个经典的参与者系统来解决这个问题,而不是适应类型化的API。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67685746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档