2012-06-28 3 views
10

재생 2.0.2로 애플리케이션을 업데이트하고 있습니다. 응용 프로그램 시작에 다음 코드를 호출 할 때재생 업데이트 2.0.2 - 이미 akka 원격 액터와 함께 사용중인 주소

[error] p.c.ActionInvoker - Failed to bind to: /127.0.0.1:2552 
org.jboss.netty.channel.ChannelException: Failed to bind to: /127.0.0.1:2552 
    at org.jboss.netty.bootstrap.ServerBootstrap.bind(ServerBootstrap.java:298) ~[netty.jar:na] 
    at akka.remote.netty.NettyRemoteServer.start(Server.scala:53) ~[akka-remote-2.0.2.jar:2.0.2] 
    at akka.remote.netty.NettyRemoteTransport.start(NettyRemoteSupport.scala:73) ~[akka-remote-2.0.2.jar:2.0.2] 
    at akka.remote.RemoteActorRefProvider.init(RemoteActorRefProvider.scala:95) ~[akka-remote-2.0.2.jar:2.0.2] 
    at akka.actor.ActorSystemImpl._start(ActorSystem.scala:568) ~[akka-actor.jar:2.0.2] 
    at akka.actor.ActorSystemImpl.start(ActorSystem.scala:575) ~[akka-actor.jar:2.0.2] 
Caused by: java.net.BindException: Address already in use 
    at sun.nio.ch.Net.bind(Native Method) ~[na:1.6.0_33] 
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:126) ~[na:1.6.0_33] 
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59) ~[na:1.6.0_33] 
    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.bind(NioServerSocketPipelineSink.java:140) ~[netty.jar:na] 
    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.handleServerSocket(NioServerSocketPipelineSink.java:92) ~[netty.jar:na] 
    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.eventSunk(NioServerSocketPipelineSink.java:66) ~[netty.jar:na] 
[error] a.r.RouterConfig$$anon$1 - Failed to bind to: /127.0.0.1:2552 
org.jboss.netty.channel.ChannelException: Failed to bind to: /127.0.0.1:2552 
    at org.jboss.netty.bootstrap.ServerBootstrap.bind(ServerBootstrap.java:298) ~[netty.jar:na] 
    at akka.remote.netty.NettyRemoteServer.start(Server.scala:53) ~[akka-remote-2.0.2.jar:2.0.2] 
    at akka.remote.netty.NettyRemoteTransport.start(NettyRemoteSupport.scala:73) ~[akka-remote-2.0.2.jar:2.0.2] 
    at akka.remote.RemoteActorRefProvider.init(RemoteActorRefProvider.scala:95) ~[akka-remote-2.0.2.jar:2.0.2] 
    at akka.actor.ActorSystemImpl._start(ActorSystem.scala:568) ~[akka-actor.jar:2.0.2] 
    at akka.actor.ActorSystemImpl.start(ActorSystem.scala:575) ~[akka-actor.jar:2.0.2] 
Caused by: java.net.BindException: Address already in use 
    at sun.nio.ch.Net.bind(Native Method) ~[na:1.6.0_33] 
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:126) ~[na:1.6.0_33] 
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59) ~[na:1.6.0_33] 
    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.bind(NioServerSocketPipelineSink.java:140) ~[netty.jar:na] 
    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.handleServerSocket(NioServerSocketPipelineSink.java:92) ~[netty.jar:na] 
    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.eventSunk(NioServerSocketPipelineSink.java:66) ~[netty.jar:na] 
[error] play - Cannot invoke the action, eventually got an error: Thrown(akka.pattern.AskTimeoutException: Timed out) 

: Akka 원격 배우를 배포 할 때

나는 문제가

ActorSystem system = Akka.system(); 

Address addr = new Address("akka", "application"); 
defaultInstance = system.actorOf(new Props(TheActor.class).withDeploy(new Deploy(new RemoteScope(addr))), "theActor"); 

을 때 application.conf이 구성 :

akka { 
    actor { 
    provider = "akka.remote.RemoteActorRefProvider" 
    } 
    remote { 
    transport = "akka.remote.netty.NettyRemoteTransport" 
    netty { 
     hostname = "127.0.0.1" 
     port = 2552 
    } 
} 
} 

동일한 설정이 play-2.0.1에서 잘 작동합니다.

play-2.0.2에서 작동하도록 구성이 변경 되었습니까?

감사합니다.

+0

유사 문제 : akka documentation에서, 당신은 자동으로 하나를 선택을 사용하여 0으로 포트를 설정할 수 있습니다. – schmmd

+0

재생 2.0.2 시작시'RemoteServerStarted @ akka : //[email protected] : 9002'이 생성됩니다. 이전에는'application @ 127.0.0.1'이었습니다. 액터를 만드는 코드가 실행되면'Address already in use' 오류가 발생합니다. – schmmd

+0

이 오류를 생성하는 샘플 응용 프로그램을 만들었습니다. https://gist.github.com/3063509를 참조하십시오. – schmmd

답변

7

어쩌면이 시도 :`concurrent.Akka.future`를 사용하여 약속을 만들 때 여기

akka { 
    actor { 
    provider = "akka.remote.RemoteActorRefProvider" 
    } 
    remote { 
    transport = "akka.remote.netty.NettyRemoteTransport" 
    netty { 
     hostname = "127.0.0.1" 
     port = 0 
    } 
} 
} 
+0

이 방법으로 응용 프로그램을 배포 할 수 있지만 다른 서버에서 원격 액터를 호출하는 포트가 무엇인지 알아야합니다. –

+1

빠른 Google 검색 후 'akka.remote.RemoteActorRefProvider.getExternalAddressFor' (https://groups.google.com/forum/?fromgroups#!topic/akka-user/POngjU9UpK8)를 사용하는 것이 가능해 보입니다. 그런 다음 HTTP 요청을 사용하여 다른 서버에서이 주소를 가져 오는 컨트롤러를 작성할 수 있습니다. –

+0

이것은 나를 위해 일했다. – schmmd

관련 문제