Должен ли я использовать Request-Id, X-Request-Id или X-Correlation-Id в заголовке запроса?

106
11

Мне не ясно, какой заголовок идентификатора я должен указать в запросе и ответе для целей корреляции.

"X-Correlation-ID" и "X-Request-ID" являются известным заголовком http. Имеет ли значение, какой я использую в запросе и ответе?

ASP.NET Core System.Diagnostics.DiagnosticSource ищет "Идентификатор запроса". Это только для целей деятельности? Почему он не использует "X-Request-ID"?

Если я не использую Activity, мне не нужно отправлять этот заголовок, верно?

Ядро ASP.NET также имеет идентификатор иерархического запроса (https://github.com/dotnet/corefx/blob/master/src/System.Diagnostics.DiagnosticSource/src/HierarchicalRequestId.md), который мне нравится. Я могу сделать что-то подобное

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

ИЛИ лучше использовать активность? Я нахожу Activity.Current всегда нулевым. Нужно ли его включать и влияет ли это на производительность?

спросил(а) 2021-01-19T18:25:53+03:00 2 месяца, 3 недели назад
1
Решение
75

Для Request-Id он однозначно идентифицирует каждый HTTP-запрос, участвующий в обработке операции, и генерируется на стороне вызывающего и передается вызываемому.

Для X-Correlation-ID, также известного как Transit ID, это уникальное значение идентификатора, которое прикрепляется к запросам и сообщениям, которые позволяют ссылаться на определенную транзакцию или цепочку событий.

Для каждого запроса вы должны использовать Request-Id, для транзакции запроса вы должны использовать X-Correlation-ID.

Если я не использую Activity, мне не нужно отправлять этот заголовок, верно?

Как правило, для идентификатора корреляции вам не нужно его использовать. Но если вы разрабатываете распределенную систему, которая включает в себя очереди сообщений и асинхронную обработку, вам будет полезно включить в ваши сообщения идентификатор корреляции.

Я нахожу Activity.Current всегда нулевым. Нужно ли его включать и влияет ли это на производительность?

Для использования Activity.Current вам необходимо включить ApplicationInsights или реализовать собственную функцию управления деятельностью.

Установите Microsoft.ApplicationInsights.AspNetCore Настройте WebHost.CreateDefaultBuilder(args).UseStartup<Startup>().UseApplicationInsights() Используйте как var activity = Activity.Current;

ответил(а) 2021-01-19T18:25:53+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема