Как регистрировать все входящие сообщения от Akka (Java)
В Scala вы можете заключить функцию приема в LoggingReceive. Как добиться того же от Java API?
def receive = {
LoggingReceive {
case x ⇒ // do something
}
}
1 ответ
Решение
Scala API имеет LoggingReceive
decorator, потому что литерал частичной функции делает неудобным выражение чего-либо, что должно быть сделано во всех случаях (например, это ведение журнала).
В Java у вас нет этой проблемы, потому что ваш onReceive
метод вызывается всегда, и вы можете поместить оператор регистрации вверху, чтобы увидеть все сообщения, которые получает актер. В качестве дополнительного бонуса вы можете решить, на каком уровне их регистрировать;-)
Если вы хотите сделать логирование условным на настройке конфигурации akka.actor.debug.receive
(так же, как для Scala), то вы можете сказать, например,
if (getContext().system().settings().AddLoggingReceive())
log.debug("received message of type {}", msg.getClass());