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

mgo*_*ois 6 scala akka

保持微服务架构的精神,我正在考虑使用git存储库为我的基于Scala + Akka的系统的每个服务.每个服务的构建产生一个工件,该工件被发布到包装系统(例如maven)repo.这些工件是用于共享公共代码的机制.

现在,由于在服务之间使用案例类进行消息传递,因此需要在任何地方都可以使用相同的类版本.使用多项目构建将接口和实现工件中的每个服务分开,然后仅从依赖项目中导入接口工件是否有利?一些替代方案是在同一工件上包含接口和实现并导入它,或者为接口和实现提供单独的存储库,这似乎是过度的,可能是过多的开销.

whe*_*ies 5

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

  1. 如果其中一个更新了其代码库,则另一个可以自由地不更新,直到它绝对必须更新才能正确交互。这也意味着您的解析库可以根据需要解释对象并忽略它们不关心的字段。

  2. 逻辑往往会找到进入事物的方法。更糟糕的是,业务逻辑往往会发现它进入类(甚至案例类)的小“帮助”方法中。这可能会以良性的方式对服务产生不利的耦合……直到它不再是良性的。