Play Framework 3.0.x (以下、Play) を始めたばかりの方向けに、サンプルを進めるうえで困ったところを共有する目的で書いています。
過去のPlay Framework 2.8.x とAkka Typed を使ったServer-Sent Events (以下、SSE) を、Apache Pekko (以下、Pekko) に変更したものです。
以下、目次
やりたいこと
Playインスタンス1 (localhost:9000) にアクセスしたクライアントが、サーバーより受け取るメッセージを、Playインスタンス2(localhost:9001) にアクセスしているクライアントも受け取ることができる
見た目
設計のポイント
Receptionist は、ActorRef を登録、検索できる仕組みで、cluster(node が複数ある場合)もサポートしている。サポートというのは、コードは変更せずに設定だけで、local、clusterを切り替えられる。
今回の(も)、サーバー間のメッセージ送信を実現するため、Receptionist を利用している。
実装してみて
- 前回同様、Receptionist に、SSE 用のSource[String, ActorRef[String]] にメッセージを送るためのActorRef[String] を直接登録すると、Cluster にしたときにうまくいかない
- なので、ActorRef[String] にメッセージを送る(リレーする)だけのActor を作って、Receptionist に登録すると、うまくいった
以上でした。