Size: a a a

2021 January 14

КГ

Константин Грачев... in symfony
Sergei Baikin
когда прбовали оно не могло в создание отдельного сообщения для кажого обрабочика
сообщения были завязаны на пхп код

там приходилось столько оберток писать чтобы его заставить работать что ну его нафиг
Звучит как - мы взяли инструмент, который не подходил под наши задачи, и подгоняя его под них устали есть кактус.
Виноват кактус
источник

SB

Sergei Baikin in symfony
Dmitry
а зачем вы учитываете кто будет обрабатывать сообщение ? задача при паблишинге закинуть в очередь, а там уже хоть трава не расти
чтобы если нафиг пхп умирал на обработке одного из хэндлеров а до этого выполнил 10 других  он при реплее не выполнял 10 других еще раз

Чтобы обработчики действительно были паралельными и независимыми

Так просто легче изолировать код
источник

SB

Sergei Baikin in symfony
Константин Грачев
Звучит как - мы взяли инструмент, который не подходил под наши задачи, и подгоняя его под них устали есть кактус.
Виноват кактус
ну мы брали месадж бас
он оказался говнецом
мы поняли ошибку и избавились

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

D

Dmitry in symfony
Sergei Baikin
чтобы если нафиг пхп умирал на обработке одного из хэндлеров а до этого выполнил 10 других  он при реплее не выполнял 10 других еще раз

Чтобы обработчики действительно были паралельными и независимыми

Так просто легче изолировать код
т.е вы не слыхали про RESPONSE_ACK да ?:)
источник

SB

Sergei Baikin in symfony
Dmitry
т.е вы не слыхали про RESPONSE_ACK да ?:)
нет в SQS такого нет)
источник

SB

Sergei Baikin in symfony
Dmitry
т.е вы не слыхали про RESPONSE_ACK да ?:)
ну и а почуму вы ACK делаете на сообщение на которое выполнилост 9 из 10 обработчиков?
источник

SB

Sergei Baikin in symfony
надо его реджектить вообще то
источник

D

Dmitry in symfony
я делаю ack на каждое сообщение которое обработалось
если ack не было, значит его можно и нужно обработать еще раз потом
источник

D

Dmitry in symfony
sqs поддерживает удаление сообщений, после обработки вы их можете удалить или переместить в dead letter
тот же самый ack вам будет
источник

D

Dmitry in symfony
зачем вы какие-то чудеса делаете чтобы потом не обрабатывать те же 10 сообщений не очень мне понятно
думаю где-то у вас недочет на тему понимания того как работают очереди
источник

SB

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

мне если вы считатете что нормально нагружать ситему просто так кучей бесполезной работы при каждом ретрае где вы делаете то что уже успешно сделали по 3-5 раз.
В случае если при этом надо обращаться к ресурсам таким как база данных и прочее то еще и значительно повышает затраты (например надо dynamodb скалировать более значительно)
источник

D

Dmitry in symfony
Sergei Baikin
не сообщений а хэндлеров

мне если вы считатете что нормально нагружать ситему просто так кучей бесполезной работы при каждом ретрае где вы делаете то что уже успешно сделали по 3-5 раз.
В случае если при этом надо обращаться к ресурсам таким как база данных и прочее то еще и значительно повышает затраты (например надо dynamodb скалировать более значительно)
у вас sqs - это очередь сообщений
консьюмеры оттуда читают сообщения, обрабатывают их
я так понял из ваших слов
источник

D

Dmitry in symfony
обработал сообщений - убрал из очереди
с чего вдруг там что-то куда-то лепить чтобы не обрабатывать по 100 раз ?
источник

SB

Sergei Baikin in symfony
Dmitry
у вас sqs - это очередь сообщений
консьюмеры оттуда читают сообщения, обрабатывают их
я так понял из ваших слов
да
но на одно собщение может быть несколько независимых обработчиков в коде. Как впрочем и в случае c symfony messenger
источник

D

Dmitry in symfony
Sergei Baikin
да
но на одно собщение может быть несколько независимых обработчиков в коде. Как впрочем и в случае c symfony messenger
и что ? консьюмер получил, прогнал через всех - вернул ответ что сообщение обработано
сообщение удалено из очереди
источник

SB

Sergei Baikin in symfony
Dmitry
и что ? консьюмер получил, прогнал через всех - вернул ответ что сообщение обработано
сообщение удалено из очереди
консюмер получил их
нашел 10 обработчиков
прогнал 9 и на 10 умер
следующий возмет и еще раз первые 9 прогонит просто так хотя они уже были успешно выполнены
источник

D

Dmitry in symfony
если у вас там один обработчик падает по пути и валит всех остальных значит у вас неправильная декомпозиция
вам нужно сделать 2-3-10 очередей который подключаться к одному exchange, если в терминах кролика, и каждый обработчик будет независимо обрабатывать
источник

D

Dmitry in symfony
у вас проблема с архитектурой, а не с мессенджером
источник

SB

Sergei Baikin in symfony
Dmitry
если у вас там один обработчик падает по пути и валит всех остальных значит у вас неправильная декомпозиция
вам нужно сделать 2-3-10 очередей который подключаться к одному exchange, если в терминах кролика, и каждый обработчик будет независимо обрабатывать
почему у меня не правильная?
я под каждый обработчик создаю свое сообщение
Они обсолютно независимо обработывабся в разных процессах

А вот messege bus symfony связывает все обработчики для сообщения в единое целое. тоесть если я просто его бы использовал то у меня появлялась бы такая проблема хотя мой код не меняется.
источник

СВ

Сергей Вершинин... in symfony
там дается возможность написать несколько handler для одного message и не более ( аналог Event + listener\subscriber)
источник