2015-10-05 39 views
0

我試圖發送消息給遠程actor,但失敗了。我的遠程演員演示中哪裏出錯?

我的主要代碼:

RemoteActorDemo.scala

import akka.actor.{Actor, ActorSystem, Props} 

object RemoteActorDemo extends App { 
    val system = ActorSystem("RemoteActorSystem") 
    val actor = system.actorOf(Props[RemoteActor], name = "RemoteActor") 
    actor ! "Remote Actor is alive" 
} 

class RemoteActor extends Actor { 
    override def receive: Receive = { 
    case msg => 
     println("### RemoteActor received message: " + msg) 
     sender ! "Hello from RemoteActor" 
    } 
} 

隨着application.conf

akka { 
    actor { 
    provider = "akka.remote.RemoteActorRefProvider" 
    } 
    remote { 
    enabled-transports = ["akka.remote.netty.tcp"] 
    netty.tcp { 
     hostname = "127.0.0.1" 
     port = 5150 
    } 
    } 
} 

而且LocalActorDemo.scala

import akka.actor.{Actor, ActorSystem, Props} 

object LocalActorDemo extends App { 
    val system = ActorSystem("ActorDemo") 

    val localActor = system.actorOf(Props[LocalActor]) 
    localActor ! "Start" 
} 

class LocalActor extends Actor { 
    val remote = context.actorSelection("akka.tcp://[email protected]:5150/user/RemoteActor") 

    override def receive: Receive = { 
    case "Start" => 
     println("### LocalActor started") 
     remote ! "Hello from LocalActor" 
    case msg => println("*** LocalActor receives msg: " + msg) 
    } 
} 

問題是當地的演員不能連接遙控器。它在控制檯打印:

### LocalActor started 
[INFO] [10/05/2015 20:57:57.334] [ActorDemo-akka.actor.default-dispatcher-4] [akka://ActorDemo/deadLetters] 
Message [java.lang.String] from Actor[akka://ActorDemo/user/$a#-11944341] to Actor[akka://ActorDemo/deadLetters] 
was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration 
settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'. 

我是新來的AKK,不知道哪裏錯了。

您可以在這裏看到演示項目:https://github.com/freewind/remote-actors-demo,您可以按照「自述文件」所述進行克隆和運行。

回答

1

local子項目添加application.conf有這樣的內容:

akka { 
    actor { 
    provider = "akka.remote.RemoteActorRefProvider" 
    } 
    remote { 
    enabled-transports = ["akka.remote.netty.tcp"] 
    netty.tcp { 
     hostname = "127.0.0.1" 
     port = 0 
    } 
    } 
} 

由於the official document說:

要在阿卡項目啓用遠程能力,你應該在最低限度,加改變你的application.conf文件

這適用於遠程系統的客戶端也是如此。