You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 13 Next »

콘솔 APP 프로젝트 생성

실습은 콘솔 APP로 진행예정입니다.

SeviceA로 생성 ( 실습에서 ServiceB,C,D 등 여러가지 테스트 서비스 생성예정 )


LIB 설치 

ServiceA  프로젝트에 nuget을 이용하여 라이브러리를 설정합니다.

Akka - Akka.Remote - Akka.Cluster

필요한것만 설치가능하지만, Cluster는 Remote와 Akka 기반 패키지를 모두 포함함으로

Cluster를 설치합니다.

nuget을 통한 라이브러리 설치: 


패키지 관리자를 통한 설치

PM> install-package Akka
PM> install-package Akka.Remote
PM> install-package Akka.Cluster


AkkaSystem을 사용하기 위한 최초 코드작성

using System;
using Akka.Actor;
using Akka.Routing;

namespace ServiceA
{
    class Program
    {
        static void Main(string[] args)
        {
            ConsoleKeyInfo cki;
            Console.CancelKeyPress += new ConsoleCancelEventHandler(myHandler);            
            using (ActorSystem system = ActorSystem.Create("ServiceA"))
            {
				//Actor의 시스템 준비 완료
                
                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;
        }
    }
}





App.config

.net의 어플리케이션 설정과 호환가능:  특이한 형태의 설정으로  JAVA와 설정방식호환  

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="akka" type="Akka.Configuration.Hocon.AkkaConfigurationSection, Akka" />
  </configSections>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
  <akka>    
    <hocon>
      <![CDATA[      
         akka {
            actor {             
              provider = "Akka.Remote.RemoteActorRefProvider, Akka.Remote"
                  deployment {
                    /some-group {
                      router = broadcast-group
                      routees.paths = [
                        "akka.tcp://ServiceB@127.0.0.1:8002/user/b1",
                        "akka.tcp://ServiceB@127.0.0.1:8002/user/b2", 
                        "akka.tcp://ServiceB@127.0.0.1:8002/user/b3"]
                    }                    
              }
            }
            
            remote {
              log-remote-lifecycle-events = DEBUG
              log-received-messages = on
              
              helios.tcp {
                  port = 8001 #bound to a specific port
                  hostname = 127.0.0.1
              }
            }            
          }          
      ]]>
    </hocon>
  </akka>
</configuration>


기본적인 설정 방법이며

서비스포트 (8001) , 라우터 정의및 로그등 기본적인 설정 방법입니다.

확장된 설정법(클러스터구성) 은 실습코드에서 다시 정리예정

설정만 으로 라우터 전략 가능하며 , 라운드 로빈 처리된 some-group 에게  메시지 전송이 가능해집니다.


실행확인

[WARNING][2017-09-01 오전 7:34:45][Thread 0018][ActorSystem(system)] NewtonSoftJsonSerializer has been detected as a default serializer. It will be obsoleted in Akka.NET starting from version 1.5 in the favor of Hyperion (for more info visit: http://getakka.net/docs/Serialization#how-to-setup-hyperion-as-default-serializer ). If you want to suppress this message set HOCON `akka.suppress-json-serializer-warning` config flag to on.


실행시 , 현재버젼기준 위와같은 경고메시지가 뜨면 성공

( 차기버젼에서 JsonSerialzier가 Hyperion으로 기본 변경예정이니, 바꿀수있으면 바꾸란의미입니다. -라이브러리 성능및 충돌문제  )









  • No labels