簡體   English   中英

使用路由配置在多租戶環境中檢查ASP.NET Core Health

[英]ASP.NET Core Health checks in multi tenant environment using routing configuration

我開始使用來自Asp.net Core的運行狀況檢查,我喜歡它們,但是我找不到一種簡單的方法將其與基於租戶的路由連接起來,例如支持:

  • / health [非租戶常規檢查]
  • / {tenant} / health [特定於租戶的檢查]

如果我成功采用了這種方法,則可以使用標簽來過濾要使用的運行狀況檢查,但是不幸的是,我無法為請求配置路由。

app.UseEndpointRouting();
app.UseHealthChecks("/{tenant}/health", new HealthCheckOptions
    {
        ResponseWriter = WriteCustomHealthResponse,
        AllowCachingResponses = false,
        Predicate = _ => _.Tags.Contains("tenant-specific")
    });

上面的代碼未正確路由。 我探索了使用如下所示的可能性:

app.MapWhen(context => 
    context.Request.Method == HttpMethod.Get.Method &&
    context.Request.?ROUTEDATA?.SOMECHECK("/{tenant}/HealthCheck"),
                builder => builder.UseHealthChecks());

但是在這種情況下,我無法檢查路由是否正確。

到目前為止,我找到的解決方案是使用查詢字符串參數並使用IHttpContextAccessor搜索承租人參數。 為此,我創建了IHealthCheck的基本抽象實現。

public abstract class BaseTenantHealthCheck : IHealthCheck
{
    private IHttpContextAccessor _httpContextAccessor;

    public BaseTenantHealthCheck(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    protected string GetTenant()
    {
        return _httpContextAccessor?.HttpContext?.Request?.Query["tenant"].ToString();
    }

    protected bool IsTenantSpecificCheck() => !string.IsNullOrEmpty(GetTenant());

    public abstract Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context,
        CancellationToken cancellationToken = default(CancellationToken));
}

然后在實現類中,傳遞如下所示的上下文訪問器。

public class MylAvailabilityHealthCheck : BaseTenantHealthCheck
{
    public MyAvailabilityHealthCheck(IOptionsMonitor<MyAvailabilityCheckOptions> options, IHttpContextAccessor httpContextAccessor)
    : base(httpContextAccessor)
    {
        [..]

要使用健康檢查,我使用:

  • http://{url}/health [用於多租戶檢查]
  • http://{url}/health?tenant=TenantName [用於特定於租戶的檢查]

我期待聽到是否有更優雅的方法可以做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM