Viennanet: Набор Библиотек Для Бэкенда. Часть 2

Сообщество разработчиков .

NET Райффайзенбанка продолжает кратко изучать содержимое ViennaNET. О том, как и почему мы к этому пришли, вы можете прочитать первую часть .

В этой статье мы рассмотрим еще не рассмотренные библиотеки для работы с распределенными транзакциями, очередями и базами данных, которые можно найти в нашем репозитории GitHub ( источники здесь ), А Пакеты Nuget здесь .



ViennaNET: набор библиотек для бэкенда.
</p><p>
 Часть 2



ViennaNET.Саги

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

Более подробно с такими механизмами можно ознакомиться, например, в книге «Шаблоны микросервисов» Криса Ричардсона.

.

В наших проектах мы реализовали простой, но полезный механизм: сагу, а точнее сагу, основанную на оркестровке.

Суть ее в следующем: есть некий бизнес-сценарий, в котором необходимо последовательно выполнять операции в разных сервисах, и если на каком-либо шаге возникают проблемы, необходимо вызвать процедуру отката для всех предыдущих шагов, где это предоставил.

Таким образом, в конце саги, независимо от успеха, мы получаем согласованные данные во всех областях.

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

Использовать несложно: достаточно сделать потомка базового абстрактного класса SagaBase , где T — ваш класс контекста, в котором вы можете хранить исходные данные, необходимые для работы саги, а также некоторые промежуточные результаты.

?Экземпляр контекста будет перенаправлен на все этапы выполнения.

Saga сама по себе является классом без сохранения состояния, поэтому экземпляр можно поместить в DI как синглтон, чтобы получить необходимые зависимости.

Пример объявления:

   

public class ExampleSaga : SagaBase<ExampleContext> { public ExampleSaga() { Step("Step 1") .

WithAction(c => .

) .

WithCompensation(c => .

);

Теги: #it-infrastructure #open source #Microservices #C++ #.

NET #it-infrastructure #raiffeisendgtl #ViennaNET #ViennaNET

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.