Сообщество разработчиков .
NET Райффайзенбанка продолжает кратко изучать содержимое ViennaNET. О том, как и почему мы к этому пришли, вы можете прочитать первую часть .
В этой статье мы рассмотрим еще не рассмотренные библиотеки для работы с распределенными транзакциями, очередями и базами данных, которые можно найти в нашем репозитории GitHub ( источники здесь ), А Пакеты Nuget здесь .
ViennaNET.Саги
Когда проект переходит на DDD и микросервисную архитектуру, то при распределении бизнес-логики по разным сервисам возникает проблема, связанная с необходимостью реализации механизма распределенных транзакций, поскольку многие сценарии часто затрагивают сразу несколько доменов.Более подробно с такими механизмами можно ознакомиться, например, в книге «Шаблоны микросервисов» Криса Ричардсона.
.
В наших проектах мы реализовали простой, но полезный механизм: сагу, а точнее сагу, основанную на оркестровке.
Суть ее в следующем: есть некий бизнес-сценарий, в котором необходимо последовательно выполнять операции в разных сервисах, и если на каком-либо шаге возникают проблемы, необходимо вызвать процедуру отката для всех предыдущих шагов, где это предоставил.
Таким образом, в конце саги, независимо от успеха, мы получаем согласованные данные во всех областях.
Наша реализация пока выполнена в базовом виде и не привязана к использованию каких-либо методов взаимодействия с другими сервисами.
Использовать несложно: достаточно сделать потомка базового абстрактного класса SagaBase , где T — ваш класс контекста, в котором вы можете хранить исходные данные, необходимые для работы саги, а также некоторые промежуточные результаты.
?Экземпляр контекста будет перенаправлен на все этапы выполнения.
Saga сама по себе является классом без сохранения состояния, поэтому экземпляр можно поместить в DI как синглтон, чтобы получить необходимые зависимости.
Пример объявления:
Теги: #it-infrastructure #open source #Microservices #C++ #.public class ExampleSaga : SagaBase<ExampleContext> { public ExampleSaga() { Step("Step 1") .
WithAction(c => .
) .
WithCompensation(c => .
);
NET #it-infrastructure #raiffeisendgtl #ViennaNET #ViennaNET
-
Ох Стоит Activex
19 Oct, 24 -
Территория Легальной Музыки (С Сайта Муз.ру)
19 Oct, 24 -
«Разбор Полетов» — Серия 16 — Тб-54М
19 Oct, 24 -
Digital-Мероприятия В Москве С 5 По 11 Июля
19 Oct, 24