lerna-stack / lerna-handson

AkkaとScalaを学ぶハンズオンコンテンツ

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Lerna ハンズオン

概要

Lerna ハンズオン (lerna-handson) で使用するサンプルアプリと演習問題です。

Releases · lerna-stack/lerna-handson から、 次の3つのファイルをダウンロードしてください。

  • アーカイブファイル (zip もしくは tar.gz)
    サンプルアプリと演習問題のソースコードです。
  • hands-on-preparation.pdf
    環境構築などの事前準備が記載された資料です。
  • hands-on.pdf
    ハンズオンで使用する説明資料です。

hands-on-preparation.pdf に従って環境構築を行うことで、
サンプルアプリの動作確認や演習問題に取り組むことができるようになります。

クイックスタート

サンプルアプリを動かしてみましょう。
サンプルアプリは REST API を提供するサーバです。
コンサートのチケット購入サービス を想定したサンプルとなります。

ターミナル1

cd docker
docker-compose up

ターミナル2

./scripts/runServer1.sh

ターミナル3

# コンサート作成 (コンサート名=RHCP, チケット枚数=3)
curl --silent --noproxy '*' -X POST -H "Content-Type: application/json" -d '{"tickets":3}' localhost:9001/concerts/RHCP
# コンサート取得 (コンサート名=RHCP)
curl --silent --noproxy '*' localhost:9001/concerts/RHCP
# コンサートチケット購入 (コンサート名=RHCP, チケット購入枚数=1)
curl --silent --noproxy '*' -X POST -H "Content-Type: application/json" -d '{"tickets":1}' localhost:9001/concerts/RHCP/tickets
# コンサートキャンセル (コンサート名=RHCP)
curl --silent --noproxy '*' -X POST localhost:9001/concerts/RHCP/cancel
# コンサート一覧  
# 一覧に反映されるまでは遅延時間があります。
curl --silent --noproxy '*' localhost:9001/concerts

フォルダ構成

  • docker
    サンプルアプリの動作に必要な Cassandra と MariaDB の Dockerfileがあります。
  • exercise-accord-basic
    Accord のサンプルコードがあります。
  • exercise-akka-basic
    Akka のサンプルコードがあります。
    演習問題も含まれています。
  • exercise-akka-persistence-basic
    Akka Persistence のサンプルコードがあります。
    演習問題も含まれています。
  • exercise-akka-http-basic
    Akka HTTP のサンプルコードがあります。
    演習問題も含まれています。
  • exercise-scala-basic
    Scala のサンプルコードがあります。
    演習問題も含まれています。
  • exercise-slick-basic
    Slick のサンプルコードがあります。
  • sample-app
    サンプルアプリです。
  • scripts
    サンプルアプリを起動するためのスクリプトです。

exercise-*** について

技術トピックごとにディレクトリがあり、
ハンズオン説明資料で使用したサンプルコードが含まれています。
また、演習問題が含まれているものもあります。
各ディレクトリには、example, exercise, answer というパッケージがあります。

  • example
    サンプルコード(スライドなどに載せているものになります)
  • exercise
    演習問題に必要なファイルがあります。
  • answer
    演習問題の答えがあります。

サンプルアプリ

サンプルアプリは REST API を提供するサーバです。
コンサートのチケット購入サービス を想定したサンプルとなります。

実行方法

まず、次の2つのサービスを起動します。

  • Cassandra
  • MariaDB
cd docker
docker-compose up
# (停止するには Ctrl+C)

サンプルアプリ(APIサーバ)を起動します。 クラスタで起動できます。 最低1台のノードを起動する必要があります。

./scripts/runServer1.sh
# 次の2つはオプション
./scripts/runServer2.sh
./scripts/runServer3.sh

テストの実行方法

演習向けテストを除外してテストする方法を準備しています。

sbt testAll

演習ごとに特別なテスト用sbtコマンドを準備しています。

sbt testMyConcertActorBinding
sbt testMyConcertActor
sbt testMyBoxOfficeResourceBinding
sbt testMyBoxOfficeResource
sbt testMyConcertProjectionRepositoryBinding
sbt testMyConcertProjectionRepository

API リクエスト例

ポート 9001 の HTTPサーバ (runServer1.shで起動する) にリクエストしています。
(runServer2.shやrunServer3.shで複数台起動している場合は)、
9002,9003 のサーバにリクエストしても問題ありません。

# コンサート作成 (コンサート名=RHCP, チケット枚数=3)
curl --silent --noproxy '*' -X POST -H "Content-Type: application/json" -d '{"tickets":3}' localhost:9001/concerts/RHCP

# コンサート取得 (コンサート名=RHCP)
curl --silent --noproxy '*' localhost:9001/concerts/RHCP

# コンサートチケット購入 (コンサート名=RHCP, チケット購入枚数=1)
curl --silent --noproxy '*' -X POST -H "Content-Type: application/json" -d '{"tickets":1}' localhost:9001/concerts/RHCP/tickets

# コンサートキャンセル (コンサート名=RHCP)
curl --silent --noproxy '*' -X POST localhost:9001/concerts/RHCP/cancel

# コンサート一覧  
# 一覧に反映されるまでは遅延時間があります。
curl --silent --noproxy '*' localhost:9001/concerts

データの削除方法

次の2つのサービスのデータを削除します。

  • Cassandra
  • MariaDB
docker-compose down --volumes

パッケージ構成

パッケージは次の通りです。
プロジェクト構成詳解 と同様の構成になっています。

  • example.adapter
    Application の インターフェース (trait) を定義します。
  • example.application
    業務ロジックを記述します。
    • example.application.command
      書き込みとインメモリからの読み込みを実装します。
    • example.application.projection
      リードモデル更新を実装します。
    • example.application.query
      リードモデルからの読み込みを実装します。
  • example.entrypoint
    Main クラスを実装します。
  • example.presentation
    HTTP API を実装します。
  • exaple.readmodel
    RDBMS にアクセスするコードを配置します。

テストに失敗する場合には?

コンピュータのスペックによってはタイムアウト値が短すぎてテストに失敗する場合があります。 sample-app/src/test/resources/application.conf にある次の設定値をすることで、タイムアウト値を変更することができます。

akka.test.default-timeout = 5s
akka.test.timefactor = 1.0

永続化されたデータ確認方法

  • Cassandra に永続化されたデータを確認する方法は、Cassandra の基本操作 に記載されています。
  • MariaDB に永続化されたデータを確認する方法は、MariaDB の基本操作 に記載されています。

変更履歴

lerna-handson に関する注目すべき変更は、CHANGELOG.md で確認できます。

Contribution

リリース方法などは CONTRIBUTING.md に記載されています。

License

lerna-handson, except for files in the docs directory, is released under the terms of the Apache License Version 2.0. The files in the docs is released under the Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0).

© 2021 TIS Inc.

About

AkkaとScalaを学ぶハンズオンコンテンツ

License:Apache License 2.0


Languages

Language:Scala 99.4%Language:Java 0.3%Language:Shell 0.3%Language:Dockerfile 0.0%