Lernaを使って実装した「決済ゲートウェイ」アプリケーションのサンプルです。
- アプリケーションを動かしてみる
- 開発環境を整えたい
- プログラムを書きたい/レビューしたい
- 実装方法を知りたい
- 共通
- Presentation プロジェクト
- Application プロジェクト
- Gateway プロジェクト
- プロジェクトの運用作業をしたい
矢印は依存方向を表す。
この構成の目的や意図については プロジェクト構成詳解 を参照してください。
ルートパッケージの直下にプロジェクトを表すパッケージを配置し、 その配下にそのプロジェクトが担当する責務領域を表現するパッケージを配置します。
それぞれのプロジェクト専用のユーティリティがある場合は、各プロジェクト配下の util
パッケージに配置します。
- jp.co.tis.lerna.payment
- presentation
- ecpayment: EC決済関連
- management: 管理用内部向けAPI
- util
- gateway
- issuing: IssuingService関連
- notification: 通知関連
- adapter (application と gateway のパッケージ構成をマージ)
- ecpayment
- issuing
- notification
- util
- wallet
- application
- ecpayment: EC決済関連
- readmodelupdater: 非同期 Read Model 更新関連
- util
- readmodel
- constant: 定数定義
- schema: Slick のテーブル定義関連
- entrypoint
- utility
- lang: Scala の言語機能を拡張するユーティリティ
- tenant: マルチテナント関連
- presentation
CHANGELOG を参照
- 開発環境のセットアップ
- 開発環境セットアップガイド に従ってセットアップ
- Cassandra起動
docker-compose up -d cassandra
- Mock server起動
docker-compose up -d mock
- MariaDB起動
docker-compose up -d mariadb mariadb2
- コンパイル&テスト実行
sbt clean test:compile test
- アプリ起動
- 1 node目
./start-app-1.sh
- 2 node目
./start-app-2.sh
- 3 node目
./start-app-3.sh
(option)
- 1 node目
- リクエスト
curl \ --silent --show-error --noproxy '*' \ -H 'Authorization:Bearer dummy' -H 'Content-Type:application/json' -H 'X-Tenant-Id:example' \ -X PUT \ -d '{ "amount":600 }' \ "http://127.0.0.1:9001/00/ec/settlements/000000000000000000000000000000000000002/$(date +%s%3N)/payment"
デフォルトではポート番号 9002
が使用されます。
※ コマンド例を記載しています。$
から始まるものがコマンドです。
実行結果例を空行を入れて記載しています。
実行結果は実行ごとに異なる値となることがあるのでご注意ください。
ヘルスチェックを行うための API です。
正常に稼働していれば StatusCode 200 と レスポンスボディ OK
が返ります。
$ curl -H 'X-Tenant-Id:example' http://127.0.0.1:9002/health
OK
アプリケーションの各種メトリクスを取得するための API です。
- 使用済みJVMヒープ (byte)
$ curl --silent --show-error --noproxy '*' \ http://127.0.0.1:9002/metrics/system-metrics/jvm-memory/heap/used 306621099
- 最大JVMヒープ (byte)
$ curl --silent --show-error --noproxy '*' \ http://127.0.0.1:9002/metrics/system-metrics/jvm-memory/heap/max 3.765960704E9
- SalesDetail イベント処理に使用するイベントハンドラの数
$ curl --silent --show-error --noproxy '*' \ http://127.0.0.1:9002/metrics/rmu/sales_detail/ec_house_money/number_of_singleton?tenant=example 25.0
- SalesDetail イベントが Cassandra に永続化されてから RMU で処理完了するまでの時間 (ms)
$ curl --silent --show-error --noproxy '*' \ http://127.0.0.1:9002/metrics/rmu/sales_detail/ec_house_money/update_delay?tenant=example 3008
バージョン情報を取得するための API です。
RPMパッケージビルドガイド に従って RPM をビルドすることで、
そのRPMビルドには unknown
ではない適切なバージョン番号とコミットハッシュが設定されます。
- バージョン番号
$ curl --silent --show-error --noproxy '*' \ http://127.0.0.1:9002/version unknown
- gitコミットハッシュ
$ curl --silent --show-error --noproxy '*' \ http://127.0.0.1:9002/commit-hash unknown
- 新規処理の受付停止
$ curl --silent --show-error --noproxy '*' \ -X POST \ http://127.0.0.1:9002/shutdown/hand-off-service 新規処理の受付停止リクエストを受け付けました
lerna-sample-payment-app is released under the terms of the Apache License Version 2.0.
© 2020 TIS Inc.