Play Akka Actors Web 和非 Web 应用程序协同工作

Play Akka Actors web and non-web application working together

我创建了一个应用程序,该应用程序具有协同工作的 Web 服务器和 ssh 服务器。目前,SSH 服务器是 Play 中的单例 运行ning。所以它是一个播放应用程序 运行在后台连接 SSH 服务器。

我希望 ssh 服务器不 100% 依赖于 Web 部件。如果他们可以 运行 在单独的服务器上以使其更容易扩展,那就太好了。

由于我正在使用 Play(基于 Akka 构建),我认为 Actors 是一个不错的解决方案。但是应该如何实现呢?

Web 和非 Web 部分都需要一些相同的 classes,例如:它们都需要有 User class 可以在2个应用程序。这些必须通过演员发送。但是网络部分和非网络部分是不同的东西。

是否可以将 2 个项目构建为 1 个具有不同入口点的项目?这样我仍然可以使用相同的 classes 并且在发送 actors 时它们将正确序列化,因为它们完全相同。或者有 different/better 方法吗?

我在 Play 文档中找到了这个页面 https://www.playframework.com/documentation/2.6.x/SBTSubProjects。但它是 "Play first",我希望这两个应用程序能够分别 运行。

您可以查看 sbt documentation 多项目构建

在您的 build.sbt 文件中,您可以创建以下部分:

lazy val shared = (project in file("shared"))

lazy val ssh = (project in file("ssh"))
  .dependsOn(shared)

lazy val http = (project in file("http"))
  .enablePlugins(PlayScala)
  .dependsOn(shared)

这样您将拥有共享代码和分离部分。您还可以添加另一个项目,将 ssh 和 http 部分聚合到一个项目中。

对于两个部分之间的通信,您可以将 akka 与远程 actor 一起使用