212 похожих чатов

Слушайте, а как можно порешать такую проблему ? есть там сервис

сообщений, есть сервис платежей. Платёж падает и посылает ивент paymentFailed

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


При этом использование команд, например, переворачивает всё наоборот (платежи знают о сообщениях)

Есть смысл писать какой-то сервис-адаптер, который послушает ивент от пейментов и пошлёт команду в сообщения ?

8 ответов

22 просмотра

ну как раз саги/бизнес-процесс менеджер в простом виде как раз про это есть бизнес прцоесс: разослал в домены команды, слушает события и если что — делает откаты (компенсирующие действия, если где-то упало, то откатить др домены (отменить заказ например, если оплата не прошла как абстрактный пример — это отправить новую команду на отмену) или переходит к след шагу

Arthur-Irgashev Автор вопроса
Максим Федоров
ну как раз саги/бизнес-процесс менеджер в простом ...

А без саг ? Они у нас считаются оверинжинирингом )

без саг: простая сущность бизнес-процесса, он работает с несколькими доменами — не в доменах же логику завязывать на др домены итого: - есть десяток контекстов - есть еще один контекст, в котором описана работа с нескольькими, довольно удобно в одном месте сборная солянка как работать с несколькими (отправил команду оплатить, отпарвил команду забронить товар, отправил сообщение на почту)

Arthur-Irgashev Автор вопроса

https://youtu.be/Fuac__g928E

Давай думать. Есть как ты сказал 2 решения влоб - либо все сервисы знают о нотификашках либо нотификашки слушают кучу ивентов и по ним пытаются понять чё делать. Дальше думаем что ещё страшного мы можем придумать. Скажем в нотификашках должен быть какой-то контент. Откуда он возьмётся? Сервису нотификаций надо будет ещё больше знать о других сервисах? Вообще в чем задача "сервиса нотификаций" - у этого сервиса есть некие топики, есть ресипиента, их настройки нотификаций, кому на email кому пуш на мобилку кому sms. Допустим на каждую большую фичу нас просят интегрировать нотификашки. Если брать решение влоб то это много зависимостей между командами. Можно сделать абстрактный контракт который позволяет зарегистрировать новый топик. В этом случае все сервисы знают про нотификашки но контракт у нас стабильный, есть дока и мы не блочим работу команды. Скажем есть админка где все можно настроить и не дергать разработчиков. В этом ключе связанность не такая большая и не является проблемой.

Arthur-Irgashev Автор вопроса
Sergey P
Давай думать. Есть как ты сказал 2 решения влоб ...

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

Arthur Irgashev
ну это не совсем нотификации, скорее внутрненние т...

это вопрос стабильности контрактов. Условно, какие данные нужны, у кого они есть... может быть решение будет не идеальным с точки зрения связанности но если скажем добавлять новые такие ивенты нужно раз в пару месяцев и это не сказывается на деливери особо - ну почему нет. тут как бы нет правильно неправильно. Вопрос стоимости.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта