我们正在将一个庞大的单片电子商务应用程序打入微服务。 (我们计划使用Java,Spring,Hibernate)我们在单片应用程序中有完成项和持久项的概念。我们的计划主要是将履行项目CRUD操作和持久项目CRUD操作分解为两个单独的API。但是我们有一些API最终需要的通用实体/表。处理这种情况的最佳方法是什么?
目前在桌面上打开的选项之一是让一个微服务拥有实体/表,并在其他微服务中具有READ ONLY对象引用。这有什么缺点吗?
答案 0 :(得分:0)
取决于您的部署策略。如果你要将两个API捆绑/打包成一个,那么如果它们共享相同的实体就可以了(事实上你不应该复制实体)。我希望将所有实体和存储库/ DAO放在一个公共包/包中,只是为了暴露各种用于crud操作的API(没有任何其他业务逻辑)。然后我的其他组件将使用这些API并具有业务逻辑。
答案 1 :(得分:0)
除了微服务无法在最终一致性下运行的情况外,确实没有太大的缺点。即使在这些情况下,您也可以随时为非常见微服务添加依赖关系,以了解如何在必要时查询常用微服务以获取相关更新,尽管这不太理想。
您可能不得不为您的用例引入某种形式的中介机制。像JMS代理这样的东西是一个理想的选择,允许一个微服务通知其他感兴趣的微服务发生的事情,以便他们每个人都能以自己的方式处理事件。
例如,可以引发CustomerMessage
,其中包含客户的ID,姓名,地址和可能的信用额度,一个微服务可能只关注ID和名称,而另一个可能也对地址和信用额度感兴趣。