Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

이러한게 있고 실제로도 사용가능하지만 우리는,  어플리케이션 하나에 옵션을 주면 여러가지 포트및 롤변경을하는

방식으로 학습환경을 구축하도록 하겠습니다.


테스트 콘솔 컨셉

Panel

1.RemoteAccessTest
2.클러스터-시드노드생성(고정포트-9999)
3.클러스터-조인노드생성(랜던포트)
4.클러스터-예비
5.클러스터-예비

테스트 선택?

...

다소 고전적인 방법으로  클러스터를 구성하고 그것이 잘 작동되는지 확인해보겠습니다.


런타임시 AKKA구동 환경 적용

Panel
var config = ConfigurationFactory.ParseString(@" akka.remote.dot-netty.tcp 
{ transport-class = ""Akka.Remote.Transport.DotNetty.DotNettyTransport, 
Akka.Remote"" transport-protocol = tcp port = 8091 hostname = ""127.0.0.1"" }"
);

var system = ActorSystem.Create("MyActorSystem", config);

//이 방식을 사용하여, 하나의 어플리케이션에 다양한 포트를 리슨하는
//액터시스템을 다수개 만들수 있습니다. 원칙적인 롤은 어플리케이션 하나당
//하나의 액터 시스템만 가지는것입니다.

Akka의 설정은 앞장에서 했듯이 , .net의 일반적인 환경설정 app.config에서 가능하며 호환이 됩니다.

...

클러스터에 한해서 위와같은 설정법을 사용할것입니다.


테스트 어플리케이션 코드

Code Block
languagec#
themeEmacs
using System;
using Akka.Actor;
using System.Threading.Tasks;
using ServiceB.STUDY;

namespace ServiceB
{
    class Program
    {
        static void Main(string[] args)
        {
            ConsoleKeyInfo cki;
            Console.CancelKeyPress += new ConsoleCancelEventHandler(myHandler);
            Task.Delay(1000).Wait();
            Console.WriteLine("테스트 선택");
            Console.WriteLine("1.RemoteAccessTest");
            Console.WriteLine("2.클러스터-시드노드생성(고정포트)");
            Console.WriteLine("3.클러스터-조인노드생성(랜던포트");
            Console.WriteLine("4.클러스터-예비");
            Console.WriteLine("5.클러스터-예비");
            cki = Console.ReadKey(true);

            AkkaTest akkaTest = new AkkaTest();

            switch (cki.Key)
            {
                case ConsoleKey.D1:
                    akkaTest.remoteTest();
                    break;
                case ConsoleKey.D2:
                    break;
                case ConsoleKey.D3:
                    break;
                case ConsoleKey.D4:
                    break;
                case ConsoleKey.D5:
                    break;
            }

            while (true)
            {
                // 메인 어플리케이션 종료방지를 위한코드 ( ctrl+x 종료 )
                cki = Console.ReadKey(true);
                if (cki.Key == ConsoleKey.X) break;
            }
        }

        protected static void myHandler(object sender, ConsoleCancelEventArgs args)
        {
            args.Cancel = true;
        }
    }
}

//요건 다른 파일에 분리
namespace ServiceB.STUDY
{
    public class AkkaTest
    {
        ActorSystem actorSystem;
        public void remoteTest()
        {
            actorSystem = ActorSystem.Create("ServiceB");
            ActorSelection otherActor = actorSystem.ActorSelection("akka.tcp://ServiceA@127.0.0.1:8001/user/myactor");
            Hello msg = new Hello("hello");
            object result = otherActor.Ask(msg).Result;
            Console.WriteLine("GetMessage:" + result.ToString());
        }
    }
}


단순하게 테스트 코드를 집결 시킬것입니다.