2012-06-28 22 views
10

Tôi đang cập nhật ứng dụng của mình để phát-2.0.2.Cập nhật để chơi 2.0.2 - Địa chỉ đã được sử dụng với diễn viên từ xa akka

Tôi có một vấn đề khi triển khai một Akka diễn viên từ xa:

[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) 

Khi gọi đoạn mã sau khi khởi động ứng dụng:

ActorSystem system = Akka.system(); 

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

Khi cấu hình này trong application.conf:

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

Thiết lập tương tự hoạt động tốt trên play-2.0.1.

Có một số thay đổi cấu hình để thực hiện trong khi chơi trên phiên bản 2.0.2 không?

Cảm ơn bạn.

+0

vấn đề tương tự ở đây khi tạo một lời hứa sử dụng 'concurrent.Akka.future'. – schmmd

+0

Khi khởi động với phiên bản 2.0.2 ban đầu, 'RemoteServerStarted @ akka: //[email protected]: 9002' được tạo. Trước đây là 'application @ 127.0.0.1'. Khi bất kỳ mã nào được chạy để tạo một diễn viên, tôi nhận được lỗi 'Địa chỉ đã sử dụng'. – schmmd

+0

Tôi đã tạo một ứng dụng mẫu tạo ra lỗi này. Xem https://gist.github.com/3063509. – schmmd

Trả lời

7

Có thể thử này: từ akka documentation, bạn có thể thiết lập các cổng 0 để sử dụng một cách tự động chọn một:

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

Tôi có thể triển khai ứng dụng theo cách này, nhưng tôi cần biết cổng là gì để gọi diễn viên từ xa của tôi từ một máy chủ khác. –

+1

Sau khi tìm kiếm nhanh trên Google, có vẻ như có thể sử dụng 'akka.remote.RemoteActorRefProvider.getExternalAddressFor' (https://groups.google.com/forum/?fromgroups#!topic/akka-user/POngjU9UpK8). Sau đó, bạn có thể viết một bộ điều khiển để lấy địa chỉ này từ máy chủ khác của bạn bằng cách sử dụng một yêu cầu http. –

+0

Điều này làm việc cho tôi. – schmmd

Các vấn đề liên quan