Актер Akka не получает кейс-класс [Akka remoting] (проблема сериализации) - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть приложение, которое запускает систему актера с супервизором, который может получать сообщения через удаленное взаимодействие akka.Сообщения, которые отправляются из удаленной системы акторов, представляют собой классы дел, например:

case class SupervisorStartChannel(channelName: String) extends SupervisorRequest

case class SupervisorShutdown() extends SupervisorRequest

При получении я получаю следующее:

def receive: Actor.Receive = LoggingReceive ({
    case SupervisorListChannels =>
      listChannels()

    case SupervisorReportComponents =>
      sender ! loadConfiguredComponents()

    case SupervisorStartChannel(channelName) =>
      sender ! startChannelByName(channelName)

    case SupervisorShutdown =>
      log.info("Shutdown received.")
      sender ! SupervisorAck
      context.system.terminate()

    case _ =>
      replayError(s"$supervisorName can't process an empty command.")

}: Receive) andThen metered.Receive

Если я отправляю SupervisorShutdown изнутриВ той же системе акторов, где работает супервизор, он вводит правильный регистр, однако при отправке SupervisorShutdown () из удаленной системы он вводит регистр _.При отправке SupervisorStartChannel (channel1) работает отлично.

РЕДАКТИРОВАТЬ: После запуска некоторых тестов я обнаружил, что проблема заключается в сериализации этого case class SupervisorShutdown() extends SupervisorRequest.Akka использует сериализатор Java по умолчанию для удаленного взаимодействия, и это вызывает его.

Есть идеи, что может быть причиной этого?

1 Ответ

0 голосов
/ 06 сентября 2018

Как подсказал @dyrkin, после запуска пары тестов это было решено с помощью SupervisorShutdown() вместо SupervisorShutdown, а затем сопоставлением также с SupervisorShutdown().

...