Akka Remote производит странный java.lang.AbstractMethodError - PullRequest
0 голосов
/ 29 июня 2019

Я играю с пультом Akka.Простой пример использования Akka 2.5.23 работает отлично.Если я добавлю функциональность в настоящий проект разработки, я столкнусь с очень странной проблемой:

Uncaught error from thread [RemoteSystem-akka.remote.default-remote-dispatcher-6]: Receiver class akka.remote.RemoteActorRefProvider does not define or inherit an implementation of the resolved method abstract serializationInformation()Lakka/serialization/Serialization$Information; of interface akka.actor.ActorRefProvider., shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[RemoteSystem]
java.lang.AbstractMethodError: Receiver class akka.remote.RemoteActorRefProvider does not define or inherit an implementation of the resolved method abstract serializationInformation()Lakka/serialization/Serialization$Information; of interface akka.actor.ActorRefProvider.
    at akka.serialization.Serialization.serializationInformation(Serialization.scala:166)
    at akka.serialization.Serialization.akka$serialization$Serialization$$withTransportInformation(Serialization.scala:172)
    at akka.serialization.Serialization.akka$serialization$Serialization$$deserializeByteArray(Serialization.scala:231)
    at akka.serialization.Serialization$$anonfun$deserialize$2.apply(Serialization.scala:221)
    at scala.util.Try$.apply(Try.scala:192)
    at akka.serialization.Serialization.deserialize(Serialization.scala:213)
    at akka.remote.MessageSerializer$.deserialize(MessageSerializer.scala:30)
    at akka.remote.DefaultMessageDispatcher.payload$lzycompute$1(Endpoint.scala:64)
    at akka.remote.DefaultMessageDispatcher.payload$1(Endpoint.scala:64)
    at akka.remote.DefaultMessageDispatcher.dispatch(Endpoint.scala:82)
    at akka.remote.EndpointReader$$anonfun$receive$2.applyOrElse(Endpoint.scala:982)
    at akka.actor.Actor$class.aroundReceive$$$capture(Actor.scala:539)
    at akka.actor.Actor$class.aroundReceive(Actor.scala)
    at akka.remote.EndpointActor.aroundReceive(Endpoint.scala:446)
    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:612)
    at akka.actor.ActorCell.invoke(ActorCell.scala:581)
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:268)
    at akka.dispatch.Mailbox.run(Mailbox.scala:229)
    at akka.dispatch.Mailbox.exec(Mailbox.scala:241)
    at akka.dispatch.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
    at akka.dispatch.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
    at akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
    at akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

Я также попытался изменить сериализаторы с помощью следующей конфигурации:

  akka {
    actor {
      provider = remote
      serializers {
          proto = "akka.remote.serialization.ProtobufSerializer"
          kryo = "com.twitter.chill.akka.AkkaSerializer"
      }
      serialization-bindings {
          "java.io.Serializable" = kryo
      }
      enable-additional-serialization-bindings = on
      allow-java-serialization = off
    }
    remote {
      enabled-transports = ["akka.remote.netty.tcp"]
      netty.tcp {
        hostname = "127.0.0.1"
        port = 2552
      }
   }
  }     

Я тщательно проверилчто все банки Akka имеют одинаковую версию.

Любая помощь в диагностике и решении проблемы высоко ценится.

1 Ответ

0 голосов
/ 08 июля 2019

Проблема в том, что Apache Beam включает Apache Flink, который использует более старую версию Akka. Процесс загрузки динамического расширения Akka автоматически загружает старую версию, что приводит к сбою. Быстрое решение состояло в том, чтобы понизить Akka до той же версии, которую использует Apache Flink.

...