【问题标题】:Angular microservices, loadChildren from urlAngular 微服务,来自 url 的 loadChildren
【发布时间】:2017-11-18 19:33:43
【问题描述】:

我最近开始思考如何在微服务架构中有效地实现 Angular。

假设我们有一个登录服务、一个用户管理服务和一个浏览、添加和编辑某些媒体的服务。每个服务都有自己的后端和前端,在自己的私有容器中提供服务。因此,每个部分都通过明确定义的 API 进行隔离,以便与后端进行交互,并使用其自己的隔离用户界面来使用该 API。

现在,假设我想将这些微服务中的每一个都绑定到一个应用程序中。我有两种方法(据我所知)来做到这一点:

  1. 我可以配置一个服务器以将每个服务放在一个子 URL 下,并让应用程序成为一个 SPA 数组,一种 MPA(多页应用程序)。

  2. 我可以创建一个主应用程序,在其中为我的每个微应用程序设置路由并按需加载它们(自定义 PreloadingStrategy,我在看你)。

  3. 我还发现了this,这个过程我个人并不看好,因为在事物的持续交付方案中你会失去微服务的许多好处。这旨在从微服务中创建一个 SPA 单体。

现在,第一种选择似乎是一件苦差事,而且一点也不好玩。第二个对我来说很有趣。看到这篇文章:https://coryrylan.com/blog/custom-preloading-and-lazy-loading-strategies-with-angular 立马开始思考;我如何利用它从 url 加载预先构建的角度模块,而不是从文件系统中打包它们?

所以我的问题是;以前有人做过吗?可能吗?这样做有安全问题吗? 或者是否有其他方法可以将我的微服务绑定到更大的应用程序中?

【问题讨论】:

    标签: angular architecture microservices


    【解决方案1】:

    微服务本身不应该是一个目标,它是一种实现目标的方法。所以,你需要回答这个问题,你想实现什么目标?

    人们开始在前端使用微服务的一个原因是可扩展性。如果您的应用程序足够大并且许多团队使用一个前端,那么最好使用微服务来减少团队之间的依赖关系,从而提高开发效率——每个团队都可以独立开发自己的部分。例如,Microsoft Azure Portal 就是一个很好的例子。它有很多前端代码,许多团队同时在上面工作。

    但这里重要的是部署。大多数前端是作为一个组件部署的,根据经典定义,前端微服务并不是完全的微服务。考虑查看 Angular 2 模块。通常人们在前端使用微服务术语实际上是一个模块,而不是可以单独开发和部署的专用组件。

    如果您的应用程序足够小(3-4 名开发人员)并且显然不会发展到几个专门的前端团队,那么在前端使用微服务根本没有必要增加额外的复杂性。

    当前端部分之间的隔离很大,它们之间没有交互时,可以使用您的第一个选项。例如,您有一些应用程序应该将用户视为具有相同样式、组件和单点登录的应用程序,但这些应用程序完全不同。那么最好将它们定位在不同的 url 中,不同的服务(甚至可能使用单独的部署)在它们之间共享共同的样式和组件。这更容易实现。

    当各部分相互关联并且它实际上是一个前端应用程序时,可以使用主应用程序。但这种方法更难实施,并且需要团队之间更多的互动。

    第三种方法也发生在提到的post

    【讨论】:

    • 感谢您的意见。为了清楚起见,您是说不可能在运行时将外部角度模块加载和引导到应用程序中?引入应用程序的不同部分必须在构建时完成?即使在 load 方法尝试从 url 加载的情况下一起破解自定义 PreloadingStrategy 也不起作用?
    • 当然可以。我说的是大部分,而不是所有时间:-) 正如我提到的大型项目使用它。为每一组模块进行专门部署会迫使您的应用程序支持不同的模块版本,这在实践中可能并不容易。考虑一下与在前端应用中拥有真正的微服务相关的所有这些额外复杂性。
    猜你喜欢
    • 2016-03-27
    • 2017-03-20
    • 2017-07-23
    • 2023-04-11
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    相关资源
    最近更新 更多