Akkaアクターシステムを使用して、既存のビジネスロジックとネットワークサービスを統合することをお勧めします。複数のAkkaアクターシステムを簡単に追加して、Playアプリケーションの完全なシステムに統合できます。Playには、利用できる内部アクターシステムも付属しています。
したがって、既存のロジックをアクターシステム自体にラップすることも、既存のシステムとの統合を処理する小さなアクターシステムを構築し、Playアプリケーションのロード時にそれらのコネクターをアクターシステムとして起動することもできます。
Playアプリケーションのロード時に内部アクターシステムをロードする方法の例を次に示します。
object Global extends GlobalSettings {
override def onStart(app: Application) {
Logger.info("Application starting...")
lazy val enabled = Play.configuration.getString("external-service").filter(_ == "enabled").isDefined
// Start External service
enabled match {
case true => {
Logger.info("External service is enabled.")
Akka.system.actorOf(Props[ExternalServiceClient], name = "serviceClient")
}
case false => {
Logger.info("External service is disabled.")
}
}
}
override def onStop(app: Application) {
Logger.info("Application shutdown...")
}
}
必要に応じて、アプリケーション内に新しいアクターシステムをロードして、次のようにすることもできます。
import akka.actor.ActorSystem
val eventSystem = ActorSystem("events")
// Start a service using the ActorSystem
val eventService = EventService(eventSystem)
// Create an Actor in the ActorSystem
val eventActor = eventSystem.actorOf(Props[EventActor], name = "eventactor")
Play Akkaの統合について詳しくは、こちらをご覧ください。Playには、 ScalaAsyncなどの機能を備えた組み込みのアクターシステムを利用できる組み込みの機能もあります。したがって、外部サービスが主にHTTPベースのサービスである場合は、このアプローチが最適な場合があります。外部サービス用のアクターシステムを構築する場合は、ここで説明されているように、リモートアクターとしてアクセスできます。AkkaRemoting