#akka #akka-stream #akka-testkit
#akka #akka-stream #akka-testkit
Вопрос:
Недавно я обновился до Akka 2.6.10. Теперь я вижу много подобных предупреждений, когда я запускаю тесты для своих актеров с ActorTestKit
:
[WARN] [12/16/2020 09:03:14.995] [AsyncTestWithControlledTime-akka.actor.internal-dispatcher-3] [akka://AsyncTestWithControlledTime/user/$a] received dead letter: GotCriticalFailure(my custom error message,akka.stream.AbruptStageTerminationException: GraphStage [akka.stream.impl.ActorRefSinkStage$anon$1@15cc9eaa] terminated abruptly, caused by for example materializer or actor system termination.)
AyncTestWithControlledTime — это класс, который я написал, и он является суперклассом всех моих тестов. Он создает тестовый набор и предоставляет конфигурацию для системы actor. Однако попытка подавить предупреждения через конфигурацию, например, с akka.log-dead-letters = off
помощью, не помогает.
Обычно я получаю предупреждения, когда мой актер подписался на поток, и тест заканчивается, поэтому поток не отменяется должным образом.
Как я могу отключить предупреждения. Было бы лучше, если бы я мог подавить их только после завершения теста и завершения работы системы test kit actor.
Комментарии:
1. Я не уверен, является ли добавление
akka.log-dead-letters = off
решением. Документы ( doc.akka.io/japi/akka/current/akka/stream /… ) заявите, что вашGraphStageLogic without any of the handler callbacks
. Может быть, если вы найдетеGraphStage
в своем проекте и убедитесь, что у них естьtry {} catch { case e: Throwable => failStage(e) }
. Я думаю, что именно здесь возникает ваша проблема.
Ответ №1:
Эта запись в журнале взята из akka.testkit.TestEventListener
(или из некоторого ее подкласса) части тестового набора Akka, она присутствует только в том случае, если вы явно включили ее через config with akka.loggers = ["akka.testkit.TestEventListener"]
.
akka.log-dead-letters
Настройка влияет только на обработчик dead letter по умолчанию, а не на testkit.
Если вы не используете logging testkit, вы можете просто удалить эту конфигурацию из своей конфигурации в тесте, если вы используете ее, возможно, вы можете использовать TestEvent.Mute
с фильтром для этого конкретного предупреждения. Mute
публикуется на шине событий и принимается TestEventListener
.