Size: a a a

2021 February 02

D

Dmitry in symfony
Sergei Baikin
Кролик сам ретраи разруливает
Писать в базу доктрина может
там ничего писать не надо особо
да, разруливает, если не потеряет. а если потеряет, то синхронизировать с базой вам нужно.
а кто будет источником правда ? упавшая база или упавший кролик ? или кто упал позднее?

это все требует проработки. это не для детей
источник

SP

Sergey Protko in symfony
Dmitry
да, разруливает, если не потеряет. а если потеряет, то синхронизировать с базой вам нужно.
а кто будет источником правда ? упавшая база или упавший кролик ? или кто упал позднее?

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

VK

Vladyslav Kopaihorod... in symfony
а куда ты сохраняешь фейловые сообщения? DXL?
источник

SP

Sergey Protko in symfony
Maksim Masiukevich
ну точнее как... написал там по большей части Кирилл, залив соплями весь пхп чатик, но всё же)
я смотрел мне не понравилось
источник

VK

Vladyslav Kopaihorod... in symfony
и что с ними потом происходит?)
источник

MM

Maksim Masiukevich in symfony
Sergey Protko
я смотрел мне не понравилось
ты не одинок, ибо там какой-то совсем другой мир. Не оч знакомый всяким решётчатым парням и парням из мира жвм
источник

MM

Maksim Masiukevich in symfony
но концепт тоже имеет право на жизнь
источник

D

Dmitry in symfony
Sergey Protko
это не для детей и потому оч грустно что для пыхи ничего нет
а хоть на чем-то есть удобный инструмент для саги ? я как-то всегда все руками делал в этом направлении
источник

VK

Vladyslav Kopaihorod... in symfony
он за год 1.4к лайков набрал, они деньги вкидывали туда?)
источник

MM

Maksim Masiukevich in symfony
Vladyslav Kopaihorodskyi
он за год 1.4к лайков набрал, они деньги вкидывали туда?)
не, просто надо уметь торговать лицом :)
источник

VK

Vladyslav Kopaihorod... in symfony
Dmitry
а хоть на чем-то есть удобный инструмент для саги ? я как-то всегда все руками делал в этом направлении
php-service-bus, дед местный сделаль, работает отлично
источник

VK

Vladyslav Kopaihorod... in symfony
а они все в убере работают? темпорал чуваки
источник

SB

Sergei Baikin in symfony
Dmitry
да, разруливает, если не потеряет. а если потеряет, то синхронизировать с базой вам нужно.
а кто будет источником правда ? упавшая база или упавший кролик ? или кто упал позднее?

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

MM

Maksim Masiukevich in symfony
Vladyslav Kopaihorodskyi
php-service-bus, дед местный сделаль, работает отлично
там есть косяки с ретраями, всё никак руки не дойдут закончить обновление.
ну короч ретраи у меня сделаны на отвали. совсем
источник

SP

Sergey Protko in symfony
Vladyslav Kopaihorodskyi
а куда ты сохраняешь фейловые сообщения? DXL?
условно говоря есть три уровня. Первый уровень - сообщения на обрботку. Там все обработчики тусят. Если у них чет пошло не так (reject) то сообщение кроликом отправляются на второй уровень. В том числе и если обработчик по какой-то причине не сделал ack и сообщение пришло второй раз с redelivery=true (мы не можем по другому убрать риски poison message).

На втором уровне тусит обработчик который для сообщений настраивает политику ретраев. Он берет энвелоп и для него прикидывает сколько раз уже выполнялось и сколько надо настроить делей. Дальше оно пишет в базу что мол "через 30 секунд попробуй заслать этот энвелоп еще раз". Так сообщение возвращается на первый уровень. Если количество ретраев больше чем мы разрешаем для сообщения - кидаем nack и сообщение автоматом уходит на третий уровень (fallback queue).

Если дошло до fallback то дальше как бы можно записать в базу (на память и для дебага) и если что сделать даже UI который позволяет эти сообщения закидывать обратно на первый уровень.

Если у тебя класстер кролика в pause minority + есть publish confirms то в целом вся схема весьма надежная и потерять сообщения становится весьма сложно.
источник

SP

Sergey Protko in symfony
А да важный нюанс - ретраи у меня работают так как мне нравится за счет того что роутинг вынесен на клиент. Мол там где мы отправляем сообщения инфраструктура чекает кто будет обрбатывать (в том числе айдишка саги вычисляется на этом этапе). Для каждого обработчика мы формируем комию сообщений что бы политики ретраев были независимы
источник

D

Dmitry in symfony
Sergei Baikin
Индепонентная обработка (а она нужна ибо очереди не гарантируют что придет только одно сообщение они гарантируют что хотябы одно) и ACK только после закрытия транзакции решают все эти проблемы
а для этого возможно нужно хранить лог обработанных, а может как-то по-другому учитывать уникальность сообщений
это все прибавляет обьем кода для реализации паттерна саги
источник

SP

Sergey Protko in symfony
Dmitry
а для этого возможно нужно хранить лог обработанных, а может как-то по-другому учитывать уникальность сообщений
это все прибавляет обьем кода для реализации паттерна саги
нет, хранить лог обработанных не поможет.
источник

SP

Sergey Protko in symfony
короч я просто слизал подчистую как примерно nservicebus работает и в целом я доволен
источник

SP

Sergey Protko in symfony
на реализацию ушло где-то 2 недели (часов 40) + пара месяцев чтения статей и доков
источник