在Akka的两个项目中共享消息类型

时间:2017-09-26 05:58:04

标签: scala sbt akka

我正在开发一个内部使用Akka actor实现的反应库。我们来调用这个库server。该库将单一类型的Actor公开为其API。此Actor接受定义其公共接口的不同类型的消息。让我们说这些消息被定义如下。

sealed trait Request
case class Creation(name: String) extends Request
sealed trait Response
case class CreationAck(name: String) extends Response

现在,我还必须实现一个使用上述库的程序。我们称这个程序为client。该程序还将使用Akka Actors与库集成,例如使用 ask模式(应用程序的其余部分不是使用actor开发的)。

implicit val timeout = Timeout(5 seconds)
def create(): Future[CreationAck] = (mainActor ? Creation).mapTo[CreationAck]
// And so on...

显然,要编译上述代码,CreationCreationAck都必须提供serverclient类型。

我的问题是:在这两个项目中,哪个是分享CreationCreationAck等公共消息的最佳方法?要构建每个程序,我使用 sbt

2 个答案:

答案 0 :(得分:2)

使用server库打包消息,因为消息代表了库的公共API。任何希望使用此库的程序都可以导入必要的server包和类。

如果消息是serverclient(以及可能还有其他)实现的接口,那么为消息创建单独的项目会很有意义。但根据您的描述,情况并非如此。相反,消息以及消息是API的实现与server特别相关。 client不以任何方式实施这些消息;它只是server库的用户。

重申一下,消息是server的公共API,并且与该库紧密耦合。邮件应与server捆绑在一起。

答案 1 :(得分:1)

我建议你创建另一个项目(例如:messages)并在其中实现这些类型的公共对象和类。

然后,导入要在其中使用项目的库。在您的情况下,请将其添加到build.sbtserver项目中的client个文件中。

通过这样做,您将能够在不同的项目中使用相同的类。