首页 文章

运行Lagom HelloWorld示例时出现akka.pattern.AskTimeoutException

提问于
浏览
0

在尝试解释here的Hello World示例时,我遇到了问题 .

请注意,我刚刚修改了 HelloEntity.java 文件,以便能够返回"Hello, World!"以外的内容 . 大多数情况下,我的更改需要时间,因此我收到以下Timeout错误 . 我目前正在尝试(在单个节点上执行PoC)来理解Lagom框架,并且没有自由部署多个节点 .

我也尝试在application.conf“call-timeout = 100s”中修改默认的lagom.circuit-breaker,但是,这似乎没有帮助 .

以下是您的参考的确切错误消息:

{“name”:“akka.pattern.AskTimeoutException:在[5000 ms]之后询问[Actor [akka:// hello-impl-application / system / sharding / HelloEntity#1074448247]]的超时时间 . 发送者[null]发送消息类型为“com.lightbend.lagom.javadsl.persistence.CommandEnvelope \” . “,”detail“:”akka.pattern.AskTimeoutException:在[Actor [akka:// hello-impl-application / system]上询问超时/ sharding / HelloEntity#1074448247]] [5000 ms]之后.Sender [null]发送了类型为“com.lightbend.lagom.javadsl.persistence.CommandEnvelope”的消息 . \ n \ tat akka.pattern.PromiseActorRef $ . $ anonfun $ defaultOnTimeout $ 1(AskSupport.scala:595)\ n \ tat akka.pattern.PromiseActorRef $ . $ anonfun $ apply $ 1(AskSupport.scala:605)\ n \ tat akka.actor.Scheduler $$ anon $ 4.run( Scheduler.scala:140)\ n \ tat scala.concurrent.Future $ InternalCallbackExecutor $ .unbatchedExecute(Future.scala:866)\ n \ tat scala.concurrent.BatchingExecutor.execute(BatchingExecutor.scala:109)\ n \ tat scala .concurrent.BatchingExecutor.execute $(BatchingExecutor.scala:103)\ n \ tat scala.concurrent.Future $ I nternalCallbackExecutor $ .execute(Future.scala:864)\ n \ tat akka.actor.LightArrayRevolverScheduler $ TaskHolder.executeTask(LightArrayRevolverScheduler.scala:328)\ n \ tat akka.actor.LightArrayRevolverScheduler $$ anon $ 4.executeBucket $ 1(LightArrayRevolverScheduler . scala:279)\ n \ tat akka.actor.LightArrayRevolverScheduler $$ anon $ 4.nextTick(LightArrayRevolverScheduler.scala:283)\ n \ tat akka.actor.LightArrayRevolverScheduler $$ anon $ 4.run(LightArrayRevolverScheduler.scala:235)\ n \ tat java.lang.Thread.run(Thread.java:748)\ n“}

Question: 有没有办法通过修改Hello World项目中的application.conf或任何java源文件来增加akka Timeout?能否帮我详细说明一下 . 在此先感谢您的时间和帮助 .

2 回答

  • 0

    感谢James的帮助/指针 . 将以下行添加到resources / application.conf为我做了诀窍:

    lagom.persistence.ask-timeout=30s
    hello {
    ..
    ..
        call-timeout = 30s
        call-timeout = ${?CIRCUIT_BREAKER_CALL_TIMEOUT}
    ..
    }
    

    Call 是服务到服务通信 . 这是一个与远程服务器通信的SeviceClient . 它使用断路器 . 这是一项额外服务电话 .

    ask (在lagom.persistence的上下文中)正在向持久性实体发送命令 . 这种情况发生在你的Lagom服务中 . 它没有使用断路器 . 这是一个服务内呼叫 .

  • 0

    呼叫超时是断路器的超时,使用 lagom.circuit-breaker.default.call-timeout 配置 . 但这不是上面的超时,上面超时的是对 HelloEntity 的请求,超时是使用 lagom.persistence.ask-timeout 配置的 . 对实体的请求超时的原因是因为在多节点环境中,您的实体在节点之间进行分片,因此对它们的询问可能会转到另一个节点,这就是为什么在节点不是这样的情况下需要超时的原因响应 .

    所有这一切,我不认为改变 ask-timeout 将解决你的问题 . 如果您有一个节点,那么如果一切正常,您的实体应立即响应 .

    • 这是您在日志中看到的唯一错误吗?

    • 你是在devmode中看到这个(即使用 runAll 命令),还是以其他方式运行Lagom服务?

    • 您的数据库是否响应?

相关问题