运行Lagom HelloWorld示例

时间:2018-04-05 03:39:47

标签: java scala akka lagom

我在试用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?能否帮我详细说明一下。 提前感谢您的时间和帮助。

2 个答案:

答案 0 :(得分:0)

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

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

  • 这是您在日志中看到的唯一错误吗?
  • 您是在devmode中看到这个(即使用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服务中。它没有使用断路器。这是一次服务内呼叫。