サンプルコードのダウンロード
https://github.com/akka-ja/akka-in-action
- sbtはインタプリタを持っている
Actorの4つの機能
- create(生成)
- send/receive(送信/受信)
- become(状態変化)
- supervive(監督)
パッケージ | 説明 |
---|---|
akka.actor.{ActorSystem, Actor, Props} | アクター関連のコード |
akka.event.Logging | ロギング拡張 |
akka.util.Timeout | ask処理のタイムアウト |
akka.http.scaladsl.Http~ | HTTP関連のコード |
package com.goticks
import scala.concurrent.Future
import akka.actor.ActorSystem
import akka.event.Logging
import akka.util.Timeout
import akka.http.scaladsl.Http
import akka.http.scaladsl.Http.ServerBinding
import akka.stream.ActorMaterializer
import com.typesafe.config.{ Config, ConfigFactory }
import scala.util.{ Failure, Success }
object Main extends App
with RequestTimeout {
val config = ConfigFactory.load()
val host = config.getString("http.host") // 設定からホスト名とポートを取得
val port = config.getInt("http.port")
implicit val system = ActorSystem()
implicit val ec = system.dispatcher // bindAndHandleは暗黙のExecutionContextが必要
val api = new RestApi(system, requestTimeout(config)).routes // the RestApi provides a Route
implicit val materializer = ActorMaterializer()
val bindingFuture: Future[ServerBinding] =
Http().bindAndHandle(api, host, port) // HTTPサーバーの起動
val log = Logging(system.eventStream, "go-ticks")
bindingFuture.map { serverBinding =>
log.info(s"RestApi bound to ${serverBinding.localAddress} ")
}.onComplete {
case Success(_) =>
log.info("Success to bind to {}:{}", host, port)
case Failure(ex) =>
log.error(ex, "Failed to bind to {}:{}!", host, port)
system.terminate()
}
}
trait RequestTimeout {
import scala.concurrent.duration._
def requestTimeout(config: Config): Timeout = {
val t = config.getString("akka.http.server.request-timeout")
val d = Duration(t)
FiniteDuration(d.length, d.unit)
}
}
2.最小のAkkaアプリケーション
この章で学ぶこと
- プロジェクトテンプレートの取得
- 最小のAkkaアプリケーションをクラウド上に構築
Akkaのアプリケーションを構築し始めるにあたって知っておくべき重要なポイント
- sbtを使ってJARを作成する
- 最小規模のチケット販売アプリケーション
- スピードに注目! TODO
2.1 クローンとビルドとテストインターフェース
本書で扱うソースコードは、全てGitHubで公開している
2.4 まとめ
- アクターを利用することで少ない労力(コード量)で、非同期なRESTサービスを構築できる
しかし、、、このままでは、実システムとしては使い物にならない - データの永続化ができていない(スケールアウトができない)