2012-11-22 3 views
2

고정 IP 주소와 포트에 공통 서버가있는 액터 시스템을 만들고 싶습니다. 서버의 주소를 아는 많은 클라이언트가 있습니다. 서버는 클라이언트의 IP 주소를 알지 못합니다. 서버의원격 호스트 주소를 모르는 원격 액터

구성 : 클라이언트의

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

구성 :

akka { 
    actor { 
    provider = "akka.remote.RemoteActorRefProvider" 
    } 
    remote { 
    transport = "akka.remote.netty.NettyRemoteTransport" 
    netty { 
     port = 2553 
    } 
    } 
} 

는 클라이언트가 전체 인터넷에서 올 수 있습니다. 이제 클라이언트의 액터에서 서버의 액터로 메시지를 보내려고합니다. 서버가 어떻게 메시지를 다시 보낼지 알고 있습니다. ActorPath을 서버에 보내면 해당 클라이언트의 주소를 알 수 있으므로 클라이언트의 IP 주소는 포함되지 않습니다.

+0

가 자동으로 작동하지 않는 이유는 무엇입니까? 위치 투명도 및 모든 ... – agilesteel

답변

1

akka.remote.netty.hostname 속성은 네트워크를 통해 통신하려는 경우 연결할 수있는 IP 주소 또는 확인할 수있는 이름으로 application.conf 내부에서 설정할 수 있습니다. 실제로 Akka를 사용하면 "클라이언트"노드도 서버가됩니다.

주소 앱 시작시 알 수없는 경우 경우에

는, Akka 문서에서이 코드 조각을 고려

import akka.actor.ActorSystem 
import com.typesafe.config.ConfigFactory 

val customConf = ConfigFactory.parseString(""" 
    akka.actor.deployment { 
    /my-service { 
     router = round-robin 
     nr-of-instances = 3 
    } 
    } 
""") 

// ConfigFactory.load sandwiches customConfig between default reference 
// config and default overrides, and then resolves it. 
val system = ActorSystem("MySystem", ConfigFactory.load(customConf)) 
+0

이것은 문제입니다. 내 'application.conf'에'akka.remote.netty.hostname'을 명시 적으로 설정할 수 없습니다. 배포 전에 클라이언트 주소를 알 수 없기 때문입니다. – pvorb

+0

답변을 편집했습니다 - 프로그래밍 방식으로 ActorSystem을 만들 수 있습니다. – idonnie

1

Actor 현재 메시지를 전송 액터 (ActorRef)에 대한 레퍼런스를 얻을 배우의 receive 방법이라 할 수 sender 불리는 방법이있다. ActorRef은 을 가지고 을 가지고 을 가지고 있는데 여기에는 액터가있는 곳의 호스트와 포트가 있습니다.

관련 문제