akka.pattern.AskTimeoutException при запуске примера Lagom HelloWorld

У меня возникла проблема при попытке воспользоваться примером Hello World, объясненным здесь < / а>.

Пожалуйста, обратите внимание, что я только что изменил файл HelloEntity.java, чтобы иметь возможность возвращать что-то кроме «Hello, World!». Скорее всего, мои изменения требуют времени, и поэтому я получаю указанную ниже ошибку тайм-аута. В настоящее время я пытаюсь (выполняю PoC) на одном узле, чтобы понять структуру Lagom, и не имею права развертывать несколько узлов.

Я также попытался изменить lagom.circuit-breaker по умолчанию в application.conf «call-timeout = 100s», однако, похоже, это не помогло.

Ниже приводится точное сообщение об ошибке для справки:

{"name": "akka.pattern.AskTimeoutException: Истекло время ожидания запроса на [Актер [akka: // hello-impl-application / system / sharding / HelloEntity # 1074448247]] через [5000 мс]. Отправитель [null ] отправлено сообщение типа \ "com.lightbend.lagom.javadsl.persistence.CommandEnvelope \". "," detail ":" akka.pattern.AskTimeoutException: время запроса истекло для [Актера [akka: // hello-impl-application / system / sharding / HelloEntity # 1074448247]] через [5000 мс]. Отправитель [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 $ InternalCallbackExecutor $ .execute (Future.scala: 864) \ n \ tat akka.actor.LightArrayRevolverScheduler $ TaskHolder.executeTask (LightArrayRevolverScheduler.scala: 328) \ n \ tat akka.actor.LightArdulerRevol ($$ .scala: 279) \ n \ tat akka.actor.LightArrayRevolverScheduler $$ anon $ 4.nextTick (LightArrayRevolverScheduler.scala: 283) \ n \ tat akka.actor.LightArrayRevolverScheduler $$ anon $ 4. n \ tat java.lang.Thread.run (Thread.java:748) \ n "}

Вопрос: Есть ли способ увеличить время ожидания akka, изменив application.conf или любой из исходных файлов java в проекте Hello World? Не могли бы вы помочь мне с точными деталями. Заранее спасибо за ваше время и помощь.


person Aseem    schedule 05.04.2018    source источник


Ответы (2)


Тайм-аут вызова - это тайм-аут для автоматических выключателей, который настраивается с помощью lagom.circuit-breaker.default.call-timeout. Но это не то, что указано выше, время ожидания выше, это запрос к вашему HelloEntity, этот тайм-аут настраивается с помощью lagom.persistence.ask-timeout. Причина, по которой существует тайм-аут для запросов к объектам, заключается в том, что в многоузловой среде ваши объекты сегментированы между узлами, поэтому запрос на них может перейти на другой узел, поэтому требуется тайм-аут, если этот узел не является отвечая.

С учетом всего сказанного, я не думаю, что изменение ask-timeout решит вашу проблему. Если у вас один узел, то ваши сущности должны немедленно ответить, если все работает нормально.

  • Это единственная ошибка, которую вы видите в журналах?
  • Вы видите это в режиме разработки (т. Е. При использовании команды runAll) или используете другой способ службы Lagom?
  • Ваша база данных отвечает?
person James Roper    schedule 05.04.2018
comment
Спасибо за ответ, Джеймс. Ниже приводится ответ на ваши вопросы: №1: Нет, я не вижу других сообщений об ошибках в журнале. №2: Да, я использую только команду runAll. №3: Да, похоже, с базой данных проблем нет. Оригинальный Hello, World! кажется, работает как шарм. Однако я вижу вышеуказанное исключение, когда добавляю свои модификации в HelloEntity.java (выполнение которых, как я знаю, займет более 30 секунд). - person Aseem; 05.04.2018
comment
Ради попытки, как мне установить lagom.persistence.ask-timeout? Спасибо - person Aseem; 05.04.2018

Спасибо Джеймсу за помощь / указатель. Добавление следующих строк в resources / application.conf помогло мне:

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

Call - это связь между службой и службой. Это SeviceClient, связывающийся с удаленным сервером. В нем используется автоматический выключатель. Это вызов для дополнительных услуг.

ask (в контексте lagom.persistence) отправляет команду постоянному объекту. Это происходит на узлах вашей службы Lagom. Он не использует прерывание цепи. Это вызов внутри службы.

person Aseem    schedule 06.04.2018