Symfony 4和微服务

3

假设我要创建几个微服务:Alpha, Beta, Gamma。从应用程序结构的角度来看,如果使用旧的Symfony版本(如2),我会为每个服务创建一个bundle,但是在Symfony 4中不再推荐使用bundles。那么... 我应该为每个服务创建单独的repositories还是在一个App中创建bundles呢?


1
这个问题非常复杂,我认为。 微服务应该如何生成/消费数据? 如果您想要共享实体/文档,则仍然可以使用Bundle,尽管它们不再被推荐使用。 但是我会为每个新的微服务创建一个新的存储库,这样它们将更加独立。例如:如果服务A失败,服务B仍然保持运行等。 - Lasha Kitia
我仍然能够拥有一个集中的存储库,用于共享类,这些类作为Composer依赖项安装。 - Roman Newaza
2个回答

9
如果你拥有不同的微服务,比如不同的应用程序,你就不需要使用bundles。你可以将它们保存在不同的仓库中,但常见做法是使用所谓的单体仓库。正如其名称所示,使用单体仓库可以将所有项目保存在一个单一的仓库中。这样做的好处是更容易地进行跨所有项目的更改,并且同步。缺点是管理工作需要更多的努力,并且在构建和部署时可能会产生额外的开销,因为很难看出哪个服务已经发生了变化,所以很可能需要重新构建所有服务。关于单体仓库,有一些书籍和演示文稿,你可能想要查看。简而言之,Symfony不限制你如何管理你的服务。你可以为所有项目使用单个仓库或多个仓库。
如果你想通过同一个应用程序提供所有的“服务”,即使没有bundles,你也可以使用命名空间来分离逻辑,例如控制器:
my_app
- src
  - Controller
    - Alpha
      - IndexController
    - Beta
      - IndexController

这应该可以在默认配置下直接使用,即使你偏离了标准配置,你只需要将配置指向正确的文件夹就可以让参数解析器等工具正常运行。当然,这需要你确保代码不被多个服务共享,以便将它们提取到自己的应用程序中。有一些静态代码分析工具可以帮助你保持架构清晰,例如确保 Alpha 不使用 Gamma 的代码,反之亦然。
如果您想更清晰地分离应用程序,请尝试以下方法:
my_app
- src
  - AlphaApp
    - ...
  - BetaApp
    - ...

您仍然可以这样做,但需要更多的手动操作,并且配方将不再起作用,需要对大多数配置进行手动更改并移动文件。如何实现取决于您是想要共享内核还是为每个服务使用单独的内核,但如果您选择这条路,我建议在同一代码库中保留不同的项目,因为这可能会产生更清洁的结果,并减少工作量。


-2

2
我知道,但是如何在微服务中使用它仍然不清楚。 - Roman Newaza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接