我在试用Hello World示例here时遇到了问题。
请注意,我刚刚修改了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]]的超时时间。 Sender [null]发送了类型为“com.lightbend.lagom.javadsl.persistence.CommandEnvelope \”的消息。“,”detail“:”akka.pattern.AskTimeoutException:在[Actor [akka:// hello-]上询问超时[5000 ms]之后的impl-application / system / sharding / HelloEntity#1074448247]]。发件人[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.Fut ure $ InternalCallbackExecutor $ .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“}
问题:有没有办法通过修改Hello World项目中的application.conf或任何java源文件来增加akka Timeout?能否帮我详细说明一下。 提前感谢您的时间和帮助。
答案 0 :(得分:0)
呼叫超时是断路器的超时,使用lagom.circuit-breaker.default.call-timeout
配置。但是,这不是上面的超时,上面超时的是对HelloEntity
的请求,使用lagom.persistence.ask-timeout
配置超时。对实体的请求超时的原因是因为在多节点环境中,您的实体跨节点分片,因此对它们的询问可能会转到另一个节点,这就是为什么需要超时的原因节点没有响应。
所有这一切,我都不认为改变ask-timeout
会解决你的问题。如果您有一个节点,那么如果一切正常,您的实体应立即响应。
runAll
命令),还是以其他方式运行Lagom服务?答案 1 :(得分: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服务中。它没有使用断路器。这是一次服务内呼叫。