使用带有 abp 的 ocelot 时如何将租户 ID 发送到下游服务

Posted

技术标签:

【中文标题】使用带有 abp 的 ocelot 时如何将租户 ID 发送到下游服务【英文标题】:how to send tenantid to downstream services when using ocelot with abp 【发布时间】:2021-09-05 17:30:03 【问题描述】:

我目前正在使用 ABP 和 ocelot 为微服务构建一个 api 网关。一切正常,但现在我想使用 api 网关作为域解析器。 ABP 的域解析器用于解析来自不同域的租户 ID,但我希望 ocelot 能够将解析后的租户 ID 发送到下游服务(在对下游服务的请求的标头中包含 __tenant 标头)。

【问题讨论】:

【参考方案1】:

您可以创建一个Middleware 以将ResolvedId 添加到请求标头中。所以豹猫会把编辑后的请求用tenantId发送到下游。

例子:

public class MyMiddleware : IMiddleware, ITransientDependency
    
        private readonly ICurrentTenant CurrentTenant;

        public MyMiddleware(ICurrentTenant currentTenant)
        
            CurrentTenant = currentTenant;
        

        public Task InvokeAsync(HttpContext context, RequestDelegate next)
        
            context.Request.Headers.Add("__tenant", CurrentTenant.Id.ToString());

            return next(context);
        
    

如您所见,中间件处理请求,它将 CurrentTenantId 添加到请求中。 CurrentTenant 之前由您的“域租户解析器”找到。

你可以在app.UseMultiTenancy()app.UseOcelot()之间使用这个中间件

...
app.UseMultiTenancy();

app.UseMiddleware<MyMiddleware>(); // it must be here, between them

app.UseOcelot();
...

【讨论】:

以上是关于使用带有 abp 的 ocelot 时如何将租户 ID 发送到下游服务的主要内容,如果未能解决你的问题,请参考以下文章

[Abp 源码分析]十多租户体系与权限验证

在从 UI (ABP.IO) 创建租户的过程中创建新角色(通过代码)

[Abp vNext 源码分析] - 19. 多租户

Abp vNext抽茧剥丝01 使用using临时更改当前租户

[Abp vNext 源码分析] - 19. 多租户

详解ABP框架的多租户