Size: a a a

Software Design/Architecture/Zen

2021 May 11

SP

Sergey Protko in Software Design/Architecture/Zen
да
источник

SP

Sergey Protko in Software Design/Architecture/Zen
смотри, мы с Максом это обсуждали
источник

k

knopkod4v in Software Design/Architecture/Zen
с учётом того, что распределённая система подразумевает дубли
источник

SB

Sergei Baikin in Software Design/Architecture/Zen
Ты все таки делаеш по сообщению на обработчик?
Ты говорил тебя макс переубедил.
Я так и не поверил сам в то что не надо размножать сообщения под каждый обработчик
Уж очень дешево это и дает кучу бонусов
источник

SP

Sergey Protko in Software Design/Architecture/Zen
как работало! у него - кидаешь доменный ивент в очередь - он попадает в консюмера, консюмер находит всех обработчиков, один фэйлится - хуй знает кто упал - досвидос. Потому такие сложности с ретраями, dead latter тебе не помогут и т.д.

Он вроде собирался это чуть переделать что бы был промежуточный вариант между тем что у меня и тем что у него.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
он меня переубедил что "можно по другому - можно мол сделать надежный консюмер который будет сам закидывать сообщения" но это тупо сложнее сделать и с моим потоком сообщений (не больше тысячи в секунду в пике) кролику норм а потому нахер напрягаться
источник

КГ

Константин Грачев... in Software Design/Architecture/Zen
symfony/messenger вроде так же работает =)
источник

SP

Sergey Protko in Software Design/Architecture/Zen
хз, я так и не разбирался что у него внутри. Сильно сомневаюсь что оно "так же работает"
источник

SB

Sergei Baikin in Software Design/Architecture/Zen
несколько раз пробовал его внедрить.
Все время чег то не зватает все время все через опу
так и остался на своем велосипеде(
источник

КГ

Константин Грачев... in Software Design/Architecture/Zen
Получил месадж из очереди, поднял все хендлеры которые его обрабатывают, for handlers => handler(event)
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
ну при индеподентности всех обработчиков это не проблема
источник

SP

Sergey Protko in Software Design/Architecture/Zen
ну вот и обсуждаем что это не оч масштабируемая шляпа
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
тот же aggregateVersion может помочь, если сообщение не к той версии агрегата
источник

SP

Sergey Protko in Software Design/Architecture/Zen
в моем же случае все предельно тупо.

мы просим бас отправить сообщение. Есть "глобальный роутинг" так что я знаю какие обработчики для какого сообщения.

Если скажем для сообщения Foo есть два обработчика - мы для каждого будем сообщение заворачивать в свой конверт. Каждый для своего ресипиента. В итоге в exchange уйдут два сообщения.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
в итоге оба конверта попадут в консюмеры (могут даже паралельно если консюмеров много) и будут обработаны. если чет пошло по пизде - reject, dead letter и попадает в retry queue. Там уже пишем сообщеньку в базу с таймаутом (как в nservicebus) и эта очередь общая для все консюмеров
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
тоесть ретраится только уже зароученое сообщение
источник

SB

Sergei Baikin in Software Design/Architecture/Zen
а зачем в базу писать?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
я к слову уже рад что не послушал Макса) я сча добавил роутинг за вечерок. Мол мне надо было что бы у разных хэндлеров разные SLA были и вжух вжух просто у ресипиентов появились группы, теперь мол можно роутинг кий для разныэ хнвелов направлять в нужные очереди
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
durable queue?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
видишь на картинке timetout storage? это тот же механизм который я юзаю для таймаутов в сагах
источник