nie*_*aki 1 scala akka playframework playframework-2.0
我正在启动一个应该提供两个项目的项目:
这就是为什么我想将"其他功能"与(新)Play框架项目集成,并利用它的即时编译和其他好处.大多数应用程序(包括业务逻辑和服务器负载)都将位于项目的非Web部分中.
所以我的问题是:如何将这两个模块打包到一个Scala应用程序中?
我认为我发现的最佳方法是将非Web部件视为Play项目的插件.我不确定这是否是正确的方法,考虑到大多数应用程序可能最终会出现在这样的"插件"中.
我考虑将这两个部分部署为单独的应用程序,但我怀疑它对我有用:我希望应用程序共享(以及其他)缓存,配置和数据库连接,我不应该真正将它们分开.
我还没有Scala或Play的经验,所以我非常感谢你的意见.
我建议使用Akka actor系统来集成您现有的业务逻辑和网络服务.您可以轻松添加多个Akka actor系统,并将它们集成到Play应用程序中的完整系统中.Play还附带了一个内部演员系统,您可以利用它.
因此,您可以将现有逻辑封装到actor系统中,也可以构建小型actor系统,负责与现有系统的集成,并在Play应用程序加载时将这些连接器作为actor系统启动.
以下是在Play应用程序加载时如何加载内部actor系统的示例.
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...")
}
}
Run Code Online (Sandbox Code Playgroud)
如果需要,您还可以在应用程序中加载新的actor系统,执行类似的操作.
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")
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关Play Akka集成的更多信息.Play还具有内置功能,您可以利用内置的actor系统和ScalaAsync等功能.因此,如果您的外部服务主要是基于HTTP的服务,那么这种方法可能最适合您.如果您为外部服务构建actor系统,那么您可以访问Akka Remoting中所述的远程actor
归档时间: |
|
查看次数: |
386 次 |
最近记录: |