asp.net-core - 我应该在请求标头中使用 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 始终为空。是否需要启用它是否会影响性能?
解决方案
对于Request-Id
,它唯一标识了操作处理中涉及的每一个 HTTP 请求,并在调用方生成并传递给被调用方。
ForX-Correlation-ID
也称为 Transit ID,是附加到允许引用特定事务或事件链的请求和消息的唯一标识符值。
对于每个请求,您应该使用Request-Id
,对于请求事务,您应该使用X-Correlation-ID
.
如果我不使用 Activity,我不需要发送该标头,对吗?
对于 Correlation ID,一般来说,您不必使用一个。但是,如果您正在设计一个包含消息队列和异步处理的分布式系统,您最好在消息中包含一个 Correlation ID。
我发现 Activity.Current 始终为空。是否需要启用它是否会影响性能?
要使用Activity.Current
,您需要能够ApplicationInsights
或实现自己的功能来管理活动。
- 安装
Microsoft.ApplicationInsights.AspNetCore
- 配置
WebHost.CreateDefaultBuilder(args).UseStartup<Startup>().UseApplicationInsights()
- 使用喜欢
var activity = Activity.Current;
推荐阅读
- c - GMP 为中间计算创建的对象是否保留在内存中?
- asp.net-mvc - ASP.NET Core MVC 项目 ViewComponent 错误:“找不到 Invoke 或 InvokeAsync ...”
- unicode - \uD83D\uDCCC 不断出现在我继承的代码中。这个 unicode 序列有什么作用?
- azure - 带有队列输出绑定的 Azure Http 函数
- vhdl - 行为和综合后模拟不匹配
- java - Cosmos db 使用 Java SDK 部分更新 SQL api
- azure-data-factory - 如何从 ADF 验证 Twitter 端点
- python - Django:为什么我的对象没有正确添加数据库?
- django - 如何使 Django Crispy Forms Inline Radios 水平显示?
- ansible - Ansible VMWare 收集 ESX 主机列表