我建议使用 Akka Actor 系统来集成您现有的业务逻辑和网络服务。您可以轻松添加多个 Akka Actor 系统并将它们集成到您的 Play 应用程序中的完整系统中。Play 还带有一个您可以利用的内部演员系统。
因此,您可以将现有逻辑包装到一个 Actor 系统中,或者您可以构建小型 Actor 系统来负责与现有系统的集成,并在 Play 应用程序加载时将这些连接器作为 Actor 系统启动。
这是一个示例,当 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等功能的内置 actor 系统。因此,如果您的外部服务主要是基于 HTTP 的服务,那么该方法可能最适合您。如果您为外部服务构建参与者系统,则可以作为远程参与者访问,如此处所述Akka Remoting