Page History
Note |
---|
Remote 는, 기존 작성했던 로컬에서 작동했던 액터를 그대로 재활용하여 , 액터설계의 코드변경이 없이 원격지에서 사용이 가능합니다. 어떻게 이게 가능한지 실습을 해보겠습니다. |
Panel | ||
---|---|---|
| ||
helios.tcp {
|
App.config 에 앞 섹션에서 이미 설정했듯이, 위 설정을 통해 이미 원격사용하기 위한 환경설정이 끝났습니다.
- provider : 원격 객체처리를 위한 원격처리 모듈을 어떤걸로 쓸것인가 지정 가능합니다. ( 현재 기준 기본값 사용)
- helios.tcp : provider중에 제공하는것중에 실제로 , transports에 해당하는 옵션으로 tcp / udp 등선택이 가능합니다.
- 그외 ip/port는 해당 주소로 리모트서비스를 제공하겠다란 옵션입니다.
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
public class EchoActor : ReceiveActor
{
public EchoActor()
{
Receive<Hello>(hello =>
{
Console.WriteLine("[{0}]: {1}", Sender, hello.Message);
Sender.Tell(hello);
});
}
}
public class Hello
{
public Hello(string message)
{
Message = message;
}
public string Message { get; private set; }
} |
전송에 사용될 Class는 공용 DLL에 정의 되어 , 공용 DLL에 위 내용을 추가한후
ServiceA / ServiceB가 에 참조를 하여야 하고
ServiceB가 ServiceA의 EcshoActor에게 메시지를 보낸 상황을 가정해보겠습니다.
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
using (ActorSystem actorSystem = ActorSystem.Create("ServiceA"))
{
IActorRef myActor = actorSystem.ActorOf<EchoActor>("myactor");
//콘솔 종료 방지 코드 생략...
} //port 8001 |
ServiceA 는 EchoActor를 제공하기만 하면됩니다.
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
using (ActorSystem actorSystem = ActorSystem.Create("ServiceB"))
{
IActorRef myActor = actorSystem.ActorSelection("akka.tcp://ServiceA@127.0.0.1:8001/user/myactor");
myActor.Tell("Hello");
//콘솔 종료 방지 코드 생략...
} //동일 컴퓨터이니 ServiceB의 설정포트를 8002로 변경 |
위와 같이 ActorSelection을 원격주소를 입력함으로, 상대 AkkaSystem 특정 액터에게 전송이 가능합니다.
로컬에서 작동과 차이점은 주소체계를 앞부분에 넣은준것외에 다른점이 없습니다.