通过单通道/ WebSocket通过MicroFrontends到MicroService后端的通信模式

时间:2018-10-16 10:44:37

标签: websocket microservices web-component micro-frontend

我们目前面临一些棘手的体系结构问题,涉及将多个Web Components与单独的后端服务集成在一个复合Web UI中,并集成到一个平滑的Web应用程序中。

(可协商的)设计决策有一些限制:

  1. MicroService应该提供自己的前端(WebComponent),我们希望使用HTML导入来允许将这样的WebComponent包含在复合UI中
  2. 前端WebComponent必须能够从其后端MicroService接收实时更新/事件
  3. 页面(复合UI中使用的Web组件的总和)应仅使用一个连接/永久占用的端口与后端进行通信

我做了一个草图,代表了我们的抽象/非技术要求,以供进一步讨论: enter image description here

据我了解,该问题可以表述为:我们如何

a)专注于进入交流

b)退出时分发通讯信息

两端的单一运输路径。

这两个任务需要在运输路径的两侧解决,例如。后端和前端。

对于后端,我非常希望采用BFF模式as not only described by Sam Newman可以满足我们的需求。然后,上述草图的右半部分(后端)看起来可能类似于此: enter image description here

运输路径可能最好使用标准化的网络技术来实现,例如 https websocket(wss)最多的时间是双向通信。我热衷于了解网络技术领域具有同等高采用率的替代方案。

对于前端,我们目前缺乏有关先前描述的模式或框架的想法和知识。

棘手的事情是,多个基本独立的Web组件需要一起查找才能使用一个中央通信路径。例如,如果通过实现一个(大型)Angular应用程序来实现前端,我们将实现并注入一个“ BackendConnectorService”(待讨论的名称),并注入到我们的各个组件中。

但是,由于我们想使用分离的Web组件,因此不存在用于共享业务逻辑和依赖项注入的此类背景层。我们是否应该编写一个专有的JS库,如果每个组件中都没有该库,该库将被加载到窗口上下文中,并(按照惯例)用于与后端通信?

这将大致整合到草图中,如下所示: enter image description here

我们认为/设计应用程序有误吗?

我对每一个合理的想法或暗示都对经过验证的模式/框架表示感谢。

您对问题和体系结构的看法也可能有助于解决我们目前面临的问题。

1 个答案:

答案 0 :(得分:0)

我会使用与后端相同的方法。 创建一个HTTP或WS网关,该前端组件将对请求进行轮询。它将连接到后端BFF,在那里您解决了所有问题。每当您要交换组件,传输或体系结构时,一个都不依赖于另一个。