Отличный вопрос :). Основная проблема с асинхронным обменом сообщениями заключается в том, что когда люди используют процедурные или объектно-ориентированные языки, работа в асинхронном режиме или на основе событий часто бывает довольно сложной и сложной, и программисту трудно ее прочитать и понять. Бизнес-логика часто намного проще, если она построена своего рода синхронным способом - вызывая методы и немедленно получая результаты и т. Д.).
Мое эмпирическое правило, как правило, состоит в том, чтобы попытаться использовать более простые модели синхронного программирования на микроуровне для бизнес-логики; затем используйте асинхронность и SEDA на макроуровне.
Например, отправка заказа на покупку может просто записать сообщение в очередь сообщений; но обработка заказа на поставку может потребовать 10 различных этапов, причем все они асинхронны и параллельны в высокопроизводительной распределенной системе со многими параллельными процессами и потоками, обрабатывающими отдельные этапы параллельно. Таким образом, проводка на макроуровне основана на подходе SEDA, но на микроуровне код для отдельных 10 шагов может быть написан в основном в стиле синхронного программирования.