일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 하이퍼레저 패브릭
- 스칼라 동시성
- 안드로이드 웹뷰
- Adapter 패턴
- 플레이프레임워크
- 파이썬 강좌
- 파이썬 머신러닝
- Hyperledger fabric gossip protocol
- 이더리움
- 블록체인
- hyperledger fabric
- 스칼라 강좌
- Golang
- 주키퍼
- CORDA
- Play2
- play 강좌
- 하이브리드앱
- Play2 로 웹 개발
- Akka
- 스칼라
- 파이썬
- 파이썬 동시성
- Actor
- 그라파나
- play2 강좌
- 파이썬 데이터분석
- 엔터프라이즈 블록체인
- akka 강좌
- 스위프트
- Today
- Total
HAMA 블로그
예제로 보는 아카(akka) - 17. 설치 ( Deploying ) 본문
- Scala 2.11.8 기반
- Akka 2.4.11 기반
- Java 8 (akka 2.4 부터는 java 8 요구함)
설치 ( Deploying )
모든 작업을 마치고 나면 실제 서비스를 위해 설치를 해야합니다. Scala 기반의 Akka 에서는 어떻게 하는지 알아보겠습니다. 참고로 이렇게 하는방법 말고 다른 방식으로도 할 수 있습니다. 매우 다양한 방식이 도처에 흩날리고 있다는.. OTL.... 하지만 제가 소개하는 Sbt stage 방식이 Akka 나 Play 전개에 가장 좋은거 같네요.
* 우아하게 종료하는 부분에 대해서는 apache 데몬등을 이용해서 만들 수 있을 것 같습니다.
* 서비스로서 만들기 위해서는 저는 그냥 실행스크립트를 init.d 에 넣어줘서 처리합니다. 다른 방법있으면 소개좀..
0. 기본 프로젝트 생성
가장 기본적인 프로젝트를 하나 만듭니다. 아래와 같이 간단한 코드를 작성합니다.
import akka.actor.{Actor, ActorLogging, ActorRef, ActorSystem, Props}
import scala.concurrent.duration._
class HelloWorld extends Actor with ActorLogging {
def receive = {
case msg: String =>
val hello = "Hello %s".format(msg)
sender() ! hello // 보낸 액터에게 되돌려주기
log.info("Sent response {}",hello)
}
}
class HelloWorldCaller(timer: FiniteDuration, actor: ActorRef)
extends Actor with ActorLogging {
case class TimerTick(msg: String) // 메세지용 케이스클래스
override def preStart(): Unit = {
super.preStart()
implicit val ec = context.dispatcher
context.system.scheduler.schedule(
timer, // 몇초 있다가
timer, // 몇초 간격으로
self, // 자신에게 보내라
new TimerTick("everybody")) // 이 메세지를
}
def receive = {
case msg: String => log.info("received {}",msg) //HelloWolrd 에서 받음.
case tick: TimerTick => actor ! tick.msg // HelloWorld 액터로 전송
}
}
object maintest extends App {
val system = ActorSystem("hellokernel")
val actor = system.actorOf(Props[HelloWorld])
val config = system.settings.config
val timer = config.getInt("helloWorld.timer")
system.actorOf(Props(
new HelloWorldCaller(
timer millis,
actor)))
}
- 일정시간 간격으로 HellowWorld 액터에게 메세지를 보내고 되받는 어플리케이션입니다.
1. 스탠드얼론 어플리케이션 만들기
1-1. project/plugins.sbt 파일에 아래와 같이 추가합니다. (sbt-native-packager plugin 을 이용)
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.0")
sbt-native-packager 는 Akka뿐만 아니라 어떤 타입의 어플리케이션에 대한 배포(distribution)를 만들기 위한 툴이다.
1-2. src/universal/ 폴더를 만들고 아래에 application.conf 와 logback.xml 을 추가.
resources 아래에 있는 기존 파일의 내용을 그대로 복사/붙혀넣기 합니다.
1-3. build.sbt 파일에 아래 내용 추가
enablePlugins(JavaAppPackaging)
scriptClasspath +="../conf"
1-4. 프로젝트 root 폴더에서 sbt stage 실행
- 위 처럼 universal 폴더가 생겼습니다.
- stage 아래의 bin 에 가보면 윈도우/리눅스에서 각각 실행 할수 있는 파일이 생겼습니다.
1-5. 프로젝트 실행
윈도우 : HelloWorld.bat
리눅스 : ./HelloWorld
실행하면 bin 폴더 아래에 logs 폴더가 생기고 로그가 메세지가 찍힐것입니다. (로그부분은 이전 강좌를 참고)
1-6. 프로젝트 백그라운드로 실행
저렇게 putty 창에서 실행하면 창 닫으면 종료되기때문에
nohup ./HelloWorld & 식으로 실행한다.
* 먼가 안되면 항상 버전 체크를 해보세요. 자바나 스칼라나 아카나~
부록 : 우분투에 자바 설치
1. repository 추가
1 | $ sudo add-apt-repository ppa:webupd8team /java |
2. repository index 업데이트
1 | $ sudo apt-get update |
3. JDK 설치
1 | $ sudo apt-get install oracle-java8-installer |
스칼라 설치는 안해도 됨.
참고:
Use-case and Deployment Scenarios
'Akka' 카테고리의 다른 글
예제로 보는 아카(akka) - 19. Akka streams [번역] (0) | 2017.03.08 |
---|---|
예제로 보는 아카(akka) - 18. 서비스로 설치 ( Deploying ) (0) | 2016.12.27 |
예제로 보는 아카(akka) - 16. 로깅 (Logging) (0) | 2016.12.26 |
액터 없이 Akka 사용하기 (0) | 2016.12.02 |
내가 Akka Actors 를 좋아하지 않는 이유 [번역] (0) | 2016.12.02 |