TRANSACTIONAL OUTBOX | Главный Паттерн Микросервисной Архитектуры

preview_player
Показать описание
Transactional Outbox - паттерн, знание которого требуют от каждого java разработчика на техническом интервью.
Он позволяет обеспечить гарантированную доставку сообщений во внешние сервисы через сеть, что критично для создания надёжных и устойчивых систем. Я объясню, как работает Transactional Outbox, и продемонстрирую один из способов его реализации на практике.

Мои соц. сети:
Instagram: ekondratyyeva

Тайминги:
00:00 - Вступление
00:17 - Какую проблему паттерн решает и когда его использовать?
01:26 - Объяснение подхода на примере
06:19 - Как хранить в бд задачи, требующие повторение?
08:58 - Как шедулер понимает, какие задачи необходимо взять в работу?
10:00 - За счет чего шедулеры не обрабатывают одни и те же записи повторно?
10:55 - Реализация паттерна
15:08 - Необходимость создания интерфейсов сервисов
18:20 - Еще одна популярная тема с собеседований
38:53 - Заключение
Рекомендации по теме
Комментарии
Автор

Вооот. Наконец-то появилось на ютубе видео, которое объясняет реальные подходы к написанию кода. Надеюсь и дальше будут похожие видео, спасибо!
Про транзакшнл идея хорошая, туда же можно и про аннотацию лок добавить, жду с нетерпением!😊

ixonjava
Автор

На 3:30 какая то каша. Во-первых пула транзакций не существует, есть connection pool, во-вторых, что значит что долгие транзакции блокируют другие быстрые транзакции, а конкретно в вашем примере на чтение??? Что под этим подразумевается? Вы хотите сказать, что если у меня транзакция, пусть даже уже 30 минут держит блокировку на какой-либо записи - я не смогу выполнить select ? С чего бы это вдруг? Особенно если берем за неупомянутые условие, что уровнь изоляции у нас стоит «read commited» т.е. по умолчанию.

freegy
Автор

Умничка, очень хорошо объясняешь) приятно слушать + пример кода, что ещё нужно для счастья

vmm-py
Автор

Создавать мапу для реализации стратегии можно следующим образом:
1. У каждого task processor прописываешь метод, который возвращает тип (taskType)
1. Создаешь конфигурационный файл, в него инжектишь список таск процессоров
2. Создаешь Бин мапы, где каждый элемент списка мапишь по taskType

Теперь можно добавлять сколько угодно обработчиков делать, просто добавляя новый taskType и его реализацию

markus
Автор

Через интерфейсы работает прокси спринга, иначе он будет городить огород из абстрактных классов.

valentineezerins
Автор

Катя, спасибо за видос! Тема действительно актуальная!

МаксМакс-чк
Автор

Очень круто рассказываешь детали! Спасибо за труд, продолжай в том же духе!

KoryRuno
Автор

Для отображения хоткеев при использовании есть какой-то готовый плагин в IDEA. Он будет выводить на экран комбинации клавиш и не придется каждый раз объяснять что было нажато

ArtemPetrov
Автор

классное видео! Пожелание по монтажу - не увеличивать части кода и схем на доске, это и так норм видно, а при перепрыгивании зума сложнее следить

furybarzha
Автор

Катя, сделай пожалуйста видео про объяснение АНОТАЦИЙ СПРИНГА, КЛАССЫ КОТОРЫЕ ИСПОЛЬЗУЮТСЯ В СПРИНГЕ И ВЗАИМОДЕЙСТВИЕ ЧЕРЕЗ СЕТЬ. плииииз. залайкайте комент чтобы Катюньдель увидела и сделала видео

povstanec
Автор

Мегаполезный видос, столько сопутствующих тем затронуто. Ну прям бест практикс! Огромное спасибо!

evgkh
Автор

Продолжай, супер комфортная подача материала)

морлишморли
Автор

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

psevdonim_youtube
Автор

1) Сервисы помеченные как бины спринга не нужно создавать через new. Если хотите сделать стратегию через спринг, посмотрите доклад Евгения Борисова про паттерны на спринге...
2) Помоему у вас select for update и сам update в разных транзакциях, думаете локи будут работать?:)

А так в целом нормально. 🎉

konstantenivanov
Автор

Отличный контент, спасибо! Пилите больше

kpacafik
Автор

Увожение!
Одноразовые интерфейсы мб нужны для dependency inversion или при работе над частью фичи которая не включает реализацию интерфейса, а только те места, которые надо сделать в рамках задачи

andreyselin
Автор

Было бы здорово, если Ты сделала бы вторую часть разбора этого патерна. О том как можно улучшить этот паттерн и какие можно сделать оптимизации для улучшения производительности.
Хотим узнать о Event Driven )

ZamalSpace
Автор

Наконец-то!!! Эту информацию нужно нести в массы. Спрашиваю на собесе уже 10 лет, 1 из 10 может хоть что-то ответить, а ведь это азы!

laletonio
Автор

25.40 вместо ручной вставки типов, можно добавить метод в интерфейс TaskType. Далее private final List<Inteface> и потом его привратить во что то типа Map<TaskType, Inteface>.

valentineezerins
Автор

Размер транзакций ограничен, понятно что про пул конекшинов, но вызвало улыбку)

oleksandrvasylchenko