Домашня сторінка Про MassTransit
Публікація
Скасувати

Про MassTransit

Є такий ‘чудовий’ проєкт, який додає зручні абстракції над популярними месседж брокерами – MassTransit. Сам автор називає його ‘an open-source distributed application framework for .NET that provides a consistent abstraction on top of the supported message transports.’, але насправді це щось середнє між фреймворком і досить масштабним проєктом.

У MassTransit достатньо бенефітів, щоб серйозно розглянути його використання у своєму проєкті:

  • Decoupling: MassTransit допомагає відокремити різні частини системи, дозволяючи передавати повідомлення між ними без знання внутрішньої реалізації.
  • Flexibility: MassTransit підтримує багато популярних меседж брокерів, тож зможете легко мігрувати.
  • Resilience: підтримка retry механізму, dead-lettering, circuit breaker, failover та багато іншого з коробки.
  • Extensibility: є можливість додавати кастомні middleware, серіалізатори, пайплайни і т.д..
  • Testability: MassTransit має in-memory реалізацію меседж брокера, що дозволяє спростити тестування.

Але я не писав би цей пост, якби не спробував цей ‘чарівний’ фреймворк у дії. Насправді ж ваш шлях у MassTransit почнеться з того що ви зіткнетесь з відсутністю адекватної документації. На момент написання цього посту остання версія MassTransit - 8.0.14 для net6.0 і 7.3.1 для попередніх версій.

По-перше, якщо ви досі не використовуєте net6.0, ви не знайдете документації взагалі. Попередні версії надійно сховані на просторах інтернету і відкриваються лише обраним, хто провів не менше ніж місяць досліджуючи StackOverflow, GitHub та YouTube. Для Вас вона доступна тут: для версії 7 та для версії 6

По-друге, якщо ви знайшли посилання на документацію, це не означає, що ви там знайдете справжню документацію. Більшість того, що там написано або не відповідає дійсності, або відповідає лише частково, або просто ускладнено. Для людини, яка ніколи не користувалась таким фреймворком це означатиме ще декілька днів у спробах розібратись, що до чого. Я втратив (так, саме втратив) два тижні на те, щоб вивчити всі концепти, які там представлені та це неможливо зробити не заглибившись в код який доступний на GitHub та відоси на YouTube.

По-третє, якщо в документації сказано, що MassTransit підтримує певний транспорт, це не означає, що він буде з ним повноцінно працювати. Як приклад, ActiveMQ брокер в MassTransit до версії 8.0.0 майже не працює, доступний тільки базовий функціонал. Про це ніде не написано в документації. Тож будьте уважні вибираючи його для ActiveMQ чи Artemis. Більшість коду в MassTransit написано розраховуючи, що користувач обере RabbitMQ. Якщо він у вас є на проєкті, то ви щасливчик. Також, якщо ви потребуєте використання нестандартної топології на проєкті, забудьте про MassTransit, ви втратите багато сил і нервів розбираючись як перевизначити стандартну топологію бібліотеки.

Якщо ви все ще сумніваєтесь чи потрібно вам додавати його до проєкту, то не забудьте, що вбудований in-memory брокер для тестування досить повільний, та буде працювати без всілякого уявлення про вашу кастомну топологію. Є досить багато статей де пропонують замінити in-memory брокер на більш легковісну версію.

Основні мінуси MassTransit:

  • Complexity: фреймворк дійсно потужний, але в правильних руках. Якщо ви відчуваєте, що в змозі сконфігурувати його під свої потреби, він буде дуже крутим доповненням до проєкту та зекономить вам час при міграції на інший брокер. Якщо ні, то краще напишіть свій шар абстракцій, де будете мати повний контроль над тим що відбувається.
  • Overhead: MassTransit завжди знаходиться між вашою системою та брокером, тож варто зважати, що це додатковий оверхед. Наприклад, під час серіалізації/десереалізації, роутингу, фільтрації, у внутрішніх пайплайнах
  • Learning curve: Дуже дуже слабка документація, доступні відоси на ютуб, багато чого є на гітхаб та стак оверфлоу, але все ще недостатньо. Майте на увазі, що витратите велику частину часу вивчаючи код, його неможливо ось так, сходу, почати використовувати.
  • Abstraction: з одного боку це головна перевага MassTransit, а з іншого головний недолік. Ви не будете знати, що ж там ‘під капотом’ та не зможете швидко пофіксити проблеми, які можуть там виникнути чи в разі, якщо у вашій системі використано нестандартний кейз.
  • Performance: фреймворк швидкий та ефективний, але не використовуйте його для High-Perfomance систем де критичний час затримки.

Головне: максимально уважно оцінюйте чи потрібен вам MassTransit, бо можете витратити багато часу та не отримати бажаний результат.

Публікація захищена ліцензією CC BY 4.0 .