我应该在哪里过滤微服务架构模式下的MS级外部服务响应? - c#

我在微服务之前使用API​​网关(BFF)来处理UI需求。

例如,我有一个调用外部服务的微服务。

在UI中,我不需要(现在)外部服务提供的所有信息。
我的MS应该只将当前需要的数据传递给BFF,还是传递整个响应,并且应该在BFF中“过滤” MS响应?

例如:

我应该在哪里过滤微服务架构模式下的MS级外部服务响应? - c#

参考方案

首先,BFF模式的全部要点是为Frontends提供一个专门构建的接口,它们可以自由地从包含它们的服务中收集数据。我建议:

如果Microservice微服务(在您的图中)在返回数据之前以某种方式处理了数据,则在写入数据时对其进行处理(如果可能,可以通过观察外部系统中的某个事件来进行处理)并存储处理后的结果(可能是本地副本) )。
如果您不需要在将数据发送到BFF时对其进行操作,那么(理论上)您正在执行的任何处理都可以在请求的上下文之外异步进行,而不是内联且具有如果出现故障,将导致不必要的不​​可用风险(称为时间耦合)。

如果以上两种情况之一可行,并且我强烈建议您避免以菊花链方式同步Web请求,因为这会大大降低您的可用性(如果每种服务的可用率达到95%,则两者合计为90%,而不是95% ,这种情况很快就会恶化)。延迟是一个令人担忧的问题(正如@picolino正确提及的那样),但是根据我的经验,它比可用性更重要。无论如何,扁平化调用栈将大大减少处理请求的时间。

从职责分配的角度来看,上述两种选择也是好的。一种服务将拥有客户数据,而另一种数据则不需要拥有自己的传递,BFF可以异步通知它来做任何需要处理的交叉事务。

当且仅当以上都不可行时,我才建议您在做出决定之前考虑一下您正在开发的服务的合同以及该服务所需的数据。盲目传递完整的数据集可能不是一个好主意,这取决于您在那里拥有的Microservice服务职责的性质是什么。

调用SignalR Hub不适用于Asp.Net Core Web API - c#

我是SignalR的新手。我正在尝试设置一个Asp.Net Core WebAPI,以便其他客户端可以使用SignalR连接到它并获取实时数据。我的Hub类是:public class TimeHub : Hub { public async Task UpdateTime(string message) { await Clients.All.SendAs…

如何将POCO类传递给.NET Core配置 - c#

我正在进行.NET Core应用程序的集成测试,并且想要使用一些测试配置。我的配置是一个POCO类,该类通过appsettings.json配置,然后通过IOptions<T>使用。在我的测试中,我想使用该类的实例。这是代码: var mySettings = GetTestSettings(); // factory method return…

重复使用Google Api Bearer令牌来访问用户的云端硬盘 - javascript

我有以下几点: gapi.auth.authorize( { client_id: CLIENT_ID, scope: SCOPES, immediate: false }, handleAuthResult); 这使我可以访问access_token:目标是使该应用程序的用户可以授予对我的应用程序的访问权限,以使用其Google驱动器存储其内容。我需要能够…

如何在.net core中调用带参数的动作? - c#

因此,我在Startup.cs中设置了以下默认模式:app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller}/{action}/{id?}"); }); 这是我的控制器…

java.net.URI.create异常 - java

java.net.URI.create("http://adserver.adtech.de/adlink|3.0") 抛出java.net.URISyntaxException: Illegal character in path at index 32: http://adserver.adtech.de/adlink|3.0 虽然n…