首页 > 解决方案 > 我应该在请求标头中使用 Request-Id、X-Request-Id 还是 X-Correlation-Id?

问题描述

我不清楚我应该在请求和响应中放入哪个 id 标头以用于关联目的。

“X-Correlation-ID”和“X-Request-ID”是已知的 http 标头。我在请求和响应中使用哪一个有关系吗?

ASP.NET Core 的 System.Diagnostics.DiagnosticSource 查找“Request-Id”。这仅用于活动目的吗?为什么不使用“X-Request-ID”?

如果我不使用 Activity,我不需要发送该标头,对吗?

ASP.NET Core 也有我喜欢的 Hierarchical Request-Id ( https://github.com/dotnet/corefx/blob/master/src/System.Diagnostics.DiagnosticSource/src/HierarchicalRequestId.md )。我可以做这样的事情

    var newRequestId = $"{context.Request.headers["X-Correlation-ID"]}:{CreateNewGuid()}";

还是使用 Activity 更好?我发现 Activity.Current 始终为空。是否需要启用它是否会影响性能?

标签: asp.net-core

解决方案


对于Request-Id,它唯一标识了操作处理中涉及的每一个 HTTP 请求,并在调用方生成并传递给被调用方。

ForX-Correlation-ID也称为 Transit ID,是附加到允许引用特定事务或事件链的请求和消息的唯一标识符值。

对于每个请求,您应该使用Request-Id,对于请求事务,您应该使用X-Correlation-ID.

如果我不使用 Activity,我不需要发送该标头,对吗?

对于 Correlation ID,一般来说,您不必使用一个。但是,如果您正在设计一个包含消息队列和异步处理的分布式系统,您最好在消息中包含一个 Correlation ID。

我发现 Activity.Current 始终为空。是否需要启用它是否会影响性能?

要使用Activity.Current,您需要能够ApplicationInsights或实现自己的功能来管理活动。

  1. 安装Microsoft.ApplicationInsights.AspNetCore
  2. 配置WebHost.CreateDefaultBuilder(args).UseStartup<Startup>().UseApplicationInsights()
  3. 使用喜欢var activity = Activity.Current;

推荐阅读