【发布时间】:2017-09-09 20:10:02
【问题描述】:
我目前的设计是让客户端使用浏览器连接到我的 (Java) Web API 网关,Web API 网关将调用每个 (Java) 微服务以获取其 JSON 数据并将其返回给发出请求的 UI 组件在客户端。
唯一的客户端渲染将来自每个 ReactJS UI 组件,用于对网关的重复请求。
在服务器端,完整的 HTML 视图将在发送回客户端之前呈现。
Client browser
▼ (Request Dashboard View)
Web API Gateway
▼ (Request microservice JSON data)
Microservice A JSON Data
Microservice B JSON Data
Microservice C JSON Data
Microservice D JSON Data
▼ (Return JSON Data to gateway)
Web API Gateway
▼ (Render HTML and return to Client)
Client browser
▼ (ReactJS UI Components request data from API Gateway)
这是不清楚的地方,最好让每个 UI 组件与 Web API 网关或它来自的父微服务通信以获取数据?
注意事项
- 让 UI 组件与 Web API 网关通信似乎是合理的,但会将微服务耦合到网关,这意味着在微服务上公开新的 API,网关也需要更新。
- 让 UI 组件直接与其微服务对话以获取数据,从而无需同时更新 Web API 网关,从而减少它们之间的耦合。但这会将微服务暴露给来自客户端浏览器的外部调用。
设计决策
- 在 API 网关中拥有 UI 组件会创建一个 UI 单体,而不是让每个微服务负责自己的 UI 组件。使用单体方法简化了解决方案,并且还避免了在客户端请求特定视图时必须聚合每个微服务 UI 组件的复杂性。
工具:
- Java
- 纳舒恩
- 空降向导
- ReactJS
- 分级
- 网页包
- NodeJS
- NPM
如何使用 Java 和 ReactJS 在 Web API 网关上聚合多个微服务 ui 组件,然后将此预渲染的 HTML 数据与 JavaScript 应用程序一起提供给客户端?
有用的参考资料:
- 使用 Java 8 和 Nashhorn 进行服务器端渲染http://winterbe.com/posts/2015/02/16/isomorphic-react-webapps-on-the-jvm/
【问题讨论】:
-
你从每个微服务加载数据为 json
-
@ConstantinGALBENU 是的,但我正在寻找有关如何执行该过程的指导。我已经更新了问题。
-
使用服务器端渲染?
-
@ConstantinGALBENU 问题已更新。
-
还是不明白要不要服务端渲染
标签: java reactjs microservices server-side-rendering