Нет транспорта для протокола в akka 2.3.4 с использованием Scala 2.11.1
Я получаю эту ошибку при попытке запустить приложение akka:
[ОШИБКА] [30.06.2014 15:58:14.591] [Thread-3] [RemoteActorRefProvider] Ошибка при поиске адреса [akka://FooPar0@127.0.0.1:2552] akka.remote.RemoteTransportException: нет транспорта загружен для протокола: [akka], доступные протоколы: [akka.tcp] на akka.remote.Remoting$.localAddressFo rRemote(Remoting.scala:88) ...
Мой проект sbt имеет следующий build.sbt:
name: = "FooPar"
версия: = "0.1"
scalaVersion: = "2.11.1"
resolvers + = "Typesafe Repository" в " http://repo.typesafe.com/typesafe/releases/"
resolvers + = "Релизы Sonatype" на " http://oss.sonatype.org/content/repositories/releases"
libraryDependencies + = "com.typesafe.akka" %% "akka-actor"% "2.3.4"
libraryDependencies + = "com.typesafe.akka" %% "akka-remote"% "2.3.4"
libraryDependencies + = "org.scalacheck" %% "scalacheck"% "1.11.4"% "test"
Наконец, сгенерированная строка конфигурации для моего приложения выглядит следующим образом:
akka { actor { provider = "akka.remote.RemoteActorRefProvider" } remote { enabled-transports = ["akka.remote.netty.tcp"] netty.tcp.hostname = "10.126.13.61" netty.tcp.port = 2552 netty.tcp.message-frame-size = 20 MiB //netty.tcp { // write-buffer-high-water-mark = 148000b // send-buffer-size = 148000b // receive-buffer-size = 148000b //} } event-handlers = [] loglevel=WARNING } my-custom-dispatcher { // type = PinnedDispatcher executor = thread-pool-executor # 10 years should be enough // thread-pool-executor.keep-alive-time = 315360000s # note that disabling core timeout altogether doesn't work # until ticket 2856 is fixed thread-pool-executor.allow-core-timeout = off mailbox-type = "akka.dispatch.UnboundedDequeBasedMailbox" }
Может кто-нибудь помочь мне найти проблему? Я следую этому руководству здесь http://doc.akka.io/docs/akka/2.3.4/scala/remoting.html, но, похоже, мой конфигурационный файл такой, каким он должен быть
В ответ Марио:
Я создаю экземпляр ActorSystem из строки конфигурации, указанной выше, а затем через этот код:
private var system: Option[ActorSystem] = None
def getSystem(machinefile: String) = synchronized {
system match {
case None =>
system = Some(ActorSystem("FooPar" + indexOf(hostName, machinefile),
ConfigFactory.parseString(conf))); system
case Some(sys) => system
}
}
То есть я не создаю Address
объекты явно.
1 ответ
Это выглядит как проблема при создании экземпляра akka.actor.Address
, Для удаленного доступа к работе первый параметр должен быть "akka.tcp"
вместо "akka"
:
val addr = Address("akka.tcp", "actorSystem", hostname, port)
Затем, когда вы хотите получить ссылку на актера:
val path = RootActorPath(addr) / "user" / "actorName"
val actorRef = context.actorSelection(path)
(Обратите внимание, что context
также может быть system
)
Как указано в комментариях, так как вы используете actorFor
попробуйте использовать akka.tcp://
вместо akka://
в URL.