scala - 在 Akka 微服务架构中共享基于案例类的消息的最佳方式

标签 scala akka

秉承微服务架构的精神,我正在考虑为基于 Scala+Akka 的系统的每个服务使用一个 git 存储库。每个服务的构建都会生成一个发布到打包系统(例如 maven)存储库的工件。这些工件是用于共享公共(public)代码的机制。

现在,由于使用案例类在服务之间传递消息,因此需要在任何地方都可以使用相同的类版本。使用多项目构建将接口(interface)中的每个服务和实现工件分开,然后只从依赖项目中导入接口(interface)工件是否有利?
一些替代方法是在同一个工件上同时包含接口(interface)和实现并导入该工件,或者为接口(interface)和实现设置单独的存储库,这似乎有点矫枉过正并且可能开销太大。

最佳答案

在这里,您将获得基于微服务设计的 2 个观点,共享一切,不共享任何内容。我在分享任何东西。同意一个通信接口(interface)(如 JSON 或其他一些序列化机制)并允许每个服务分别处理域对象表示。这就是为什么

  • 如果一个人更新了它的代码库,另一个人可以自由地不更新,直到它必须更新才能正确接口(interface)。这也意味着您的解析库可以根据需要解释对象并忽略它们不关心的字段。
  • 逻辑倾向于找到进入事物的方式。更糟糕的是,业务逻辑倾向于在类上找到它的方法,甚至是案例类。这可能会以良性的方式对服务产生不利的影响……直到它不再是良性的。
  • 关于scala - 在 Akka 微服务架构中共享基于案例类的消息的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33368502/

    相关文章:

    list - Scala:对列表中的键/值对使用选项

    mongodb - Akka和ReactiveMongo

    scala - Scala/Akka 中的序列化

    scala - 是否有可能克服 akka 接收中的类型删除?

    scala - JSweet 能否有效地移植 Java 库以在交叉构建的 Scala.js 项目中使用?

    algorithm - Spark 发现时间戳中的差距

    scala - 类型参数化或结构子类型化或

    scala - AKKA future 和 Java 线程

    java - 不要在父供应商参与者重新启动时重新启动处理参与者

    scala - 如何将不做任何处理的处理程序设置为按名称参数?