Calabonga.Microservices.Tracker 1.0.0

Library helps to generate a trace ID string for the cross-microservice communication. https://www.calabonga.net/blog/post/tracking-correlationid-between-microservices-asp-net-core

Install-Package Calabonga.Microservices.Tracker -Version 1.0.0
dotnet add package Calabonga.Microservices.Tracker --version 1.0.0
<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
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Что такое TraceId

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

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

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

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

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

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

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

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

Что такое TraceId

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

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

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

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

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

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

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

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

Release Notes

First release

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version History

Version Downloads Last updated
1.0.0 127 4/11/2020
1.0.0-beta2 128 4/10/2020
1.0.0-beta1 131 4/9/2020