私はAkkaのアクターを使って内部的に実装されたリアクティブライブラリを開発しています。このライブラリをserver
と呼ぶことにしましょう。ライブラリはそのAPIとして単一のタイプのActorを公開します。このアクタは、パブリックインターフェイスを定義するさまざまなタイプのメッセージを受け入れます。これらのメッセージが以下のように定義されているとしましょう。Akkaの2つのプロジェクト間でメッセージの種類を共有します
sealed trait Request
case class Creation(name: String) extends Request
sealed trait Response
case class CreationAck(name: String) extends Response
ここで、上記のライブラリを使用するプログラムも実装する必要があります。このプログラムをclient
と呼ぶことにしましょう。このプログラムでは、Acckaアクターを使用して、ライブラリーと統合することもできます。例えば、askパターン(残りのアプリケーションはアクターを使用して開発されていません)を使用します。明らか
implicit val timeout = Timeout(5 seconds)
def create(): Future[CreationAck] = (mainActor ? Creation).mapTo[CreationAck]
// And so on...
は、タイプCreation
とCreationAck
はserver
およびclient
の両方利用可能である必要があり、上記のコードにコンパイルできるようにします。
私の質問は、Creation
とCreationAck
のような公開メッセージを2つのプロジェクトで共有するのに最適なアプローチはどれですか?各プログラムをビルドするには、sbtを使用しています。
あなたが言ったことを達成するためにsbtとプロジェクト構造を設定する方法の例を教えてください。 –