Calabonga.Microservices.Tracker 1.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package Calabonga.Microservices.Tracker --version 1.0.0
NuGet\Install-Package Calabonga.Microservices.Tracker -Version 1.0.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Calabonga.Microservices.Tracker" Version="1.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Calabonga.Microservices.Tracker --version 1.0.0
#r "nuget: Calabonga.Microservices.Tracker, 1.0.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Calabonga.Microservices.Tracker as a Cake Addin
#addin nuget:?package=Calabonga.Microservices.Tracker&version=1.0.0

// Install Calabonga.Microservices.Tracker as a Cake Tool
#tool nuget:?package=Calabonga.Microservices.Tracker&version=1.0.0

Что такое TraceId

В микросервисной архитектуре много сервисов по определению. Значит одна бизнес-операция может "пролегать" через несколько сервисов, а значит множество REST-запросов "полетят" по разным WebAPI. Например, оплата в интернет-магазине товара является бизнес-операцией, которая может состоять из нескольких запросов: оплата счета, отправка уведомлений, сбор статистики и т.д. И каждый из перечисленных запросов может (и должен) обрабатываться отдельным сервисом. Вопрос, как фильтровать все запросы для одной бизнес-операции чтобы отследить результаты? Ответ - надо чтобы все запросы были помечены одной и той же меткой (идентификатором). Такой идентификатор обычно называют CorrelationId (я называю TraceId, потому что так короче и писать проще).

Как это работает

Работает система на базе заголовков (headers) запросов. И в REST-запросах, и в MessageQueue-запросах... Почему используются "заголовки"? Перефразирую вопрос, почему нельзя сделать ViewModel, к котором будет TraceId? Тезисно:

  • Потому что эта операция стоит над бизнес-логикой и, следовательно, не должна смешиваться.
  • Потому что ваши ViewModels будут меняться, появляться, исчезать, а запросы изменяются очень и очень редко.
  • Потому что обработка TraceId происходит в том числе и другими сервисами. Например, для сбора статистики или мониторинга. А ваши ViewModels никто "залезать" не будет.

Как реализовать в ASP.NET Core?

Уже готовых решений в интернете полным-полно. Я использую библиотеку Calabonga.Microservices.Tracker, которой решил поделиться совершенно недавно. Как это работает.

  • Установливаете nuget-пакет
  • Настраиваете пару параметров
  • И вуаля!

Инструкция по применению

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 is compatible. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
4.0.1 203 2/14/2024
4.0.0 1,317 4/20/2023
3.0.0 946 1/26/2021
1.0.1 362 12/14/2020
1.0.1-beta1 246 12/14/2020
1.0.0 502 4/11/2020
1.0.0-beta2 364 4/10/2020
1.0.0-beta1 352 4/9/2020

First release