我的应用程序的核心由一套微服务组成,每个微服务大多使用DDD架构。
在标准MVC解决方案中,客户端将访问我的控制器,控制器将与我的微服务交互。
在Blazor服务器设置中,方法将类似。
然而,通过Blazor WebAssembly(Hosted(设置,我有机会直接从Blazor Web Assembly客户端引用我的微服务。
这明智吗?
还是我最好在Blazor服务器上创建一个facade(反过来访问微服务(,然后只从Blazor WebAssembly客户端与该facade通信?
我的Blazor服务器有自己的引用微服务的需求,我正要在客户端上注册微服务,然后想知道这是否明智。
这在很大程度上取决于您的体系结构及其约束,并且需要考虑一个合适的答案。
BFF
你可以使用BFF(后端对前端(模式,你的脸。在这种情况下,另一个微服务将充当Blazor应用程序和微服务环境之间的网关。
因此,前端不需要知道在什么服务中可以找到什么信息。通常,这简化了前端的开发。此外,BFF可以处理诸如身份验证之类的跨领域问题。
然而,您引入了一种新的微服务,它无助于解决您的业务问题。你又增加了一层偶然的复杂性。
此外,使用BFF,您可以在服务之间创建某种依赖关系。如果您更改或添加微服务的功能,您也需要更新BFF。
直接呼叫他们
如果你的微服务有一种HTTP(REST(API(不是每个微服务都需要btw(,可以向公众(你的Blazor客户端(公开,那么直接从客户端调用它们是一种选择。
每个服务都需要处理交叉问题,比如自己进行身份验证。客户端需要跟踪到该服务的多个潜在连接。他们会有不同的URL,但可能也需要不同的标题等。
结论
这取决于情况。你最了解你的体系结构,有很多文章讨论BFF的优缺点。我可以建议从这篇文章开始https://learn.microsoft.com/en-us/dotnet/architecture/microservices/architect-microservice-container-applications/direct-client-to-microservice-communication-versus-the-api-gateway-pattern.
- 我们谈论3个或30个微服务吗
- 客户端多久调用一次微服务
- 客户端需要多久请求多个服务来生成一个视图
- 您以前使用过API网关吗
- 是否需要身份验证或存在问题
- 微服务的API有多定期更改
我希望我的答案能帮助你找到答案。:(
大多数情况下,没有。在客户端上运行的代码通常与API-Gateway通信,让它成为JavaScriptSPA、移动应用程序或现在的blazor-webassembly。
原因如下:
- 当任何微服务发生变化时,更新客户端缓存的代码比更新服务器代码更困难
- 防火墙后面的客户端可能无法访问微服务的通信协议(例如AMPQ、gRPC(或端口
- 客户端的internet连接可能较慢。向多个微服务发出多个请求可能会导致用户体验不佳
- 在每个微服务中处理客户端授权可能会有问题