Size: a a a

Laravel для начинающих

2020 July 13

R#

Reset # Alexey S. in Laravel для начинающих
Andrey Helldar
Такое встречал только в говнокоде)
давай я приведу пример

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

в результате мой код каждую секунду опрашивает софт, как решить по другому я не знаю
источник

AH

Andrey Helldar in Laravel для начинающих
Steam Vis
Я стараюсь нормально писать,,но когда не умеешь, надо хоть с чего-то начинать
Запоминай такие варианты и старайся их не использовать.
Если пришлось - ищи причину что привело к этому и как исправить.
источник

VY

Vladimir Yefremov in Laravel для начинающих
Vladyslav
а кто гит положил?)
навалились все вместе - и готово!
источник

А

Андрей in Laravel для начинающих
Vladimir Yefremov
навалились все вместе - и готово!
В воскресенье? Ночью? Айтишники? Серьезно?
источник

AH

Andrey Helldar in Laravel для начинающих
Reset # Alexey S.
давай я приведу пример

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

в результате мой код каждую секунду опрашивает софт, как решить по другому я не знаю
Легко решается.
От юзера создаёшь джобу, она ломится на софт. Если таска в работе, переставляет себя обратно в очередь (в свойствах джобы указывается таймаут, например, 2-3 секунды).
Если таска выполнена, отправляется уведомление юзеру по тем же сокетам.
источник

R#

Reset # Alexey S. in Laravel для начинающих
это уже джоба дело в том что
источник

R#

Reset # Alexey S. in Laravel для начинающих
в релизе вопросов нету,а при синхронном запуска джоба будет себя назад откатывать?
источник

VY

Vladimir Yefremov in Laravel для начинающих
Андрей
В воскресенье? Ночью? Айтишники? Серьезно?
он же сегодня утром написал....

ну и...
когда у нас ночь воскресенья, у индийцев и китайцев - уже утро понедельника :)
источник

AH

Andrey Helldar in Laravel для начинающих
Reset # Alexey S.
в релизе вопросов нету,а при синхронном запуска джоба будет себя назад откатывать?
Зачем откатывать?
источник

R#

Reset # Alexey S. in Laravel для начинающих
В релизном варианте джоба берет из БД задание и ставит в софт, ждет окончания, делает обработку и пишет результат в БД.
но в процессе отладки когда я что то тестирую, я переключаю режим в синхронный, что сразу отлавливать баги.
источник

AH

Andrey Helldar in Laravel для начинающих
Reset # Alexey S.
В релизном варианте джоба берет из БД задание и ставит в софт, ждет окончания, делает обработку и пишет результат в БД.
но в процессе отладки когда я что то тестирую, я переключаю режим в синхронный, что сразу отлавливать баги.
Дак пропиши чтобы задание обратно ставилось
источник

AH

Andrey Helldar in Laravel для начинающих
Это всё прихоти разработчика, а не инструмента.
источник

AH

Andrey Helldar in Laravel для начинающих
Reset # Alexey S.
В релизном варианте джоба берет из БД задание и ставит в софт, ждет окончания, делает обработку и пишет результат в БД.
но в процессе отладки когда я что то тестирую, я переключаю режим в синхронный, что сразу отлавливать баги.
Я понял нюанс. Джоба берётся из базы сайта и передаётся в софт. Получается, физически она в базе не существует и, поэтому, откатывать джобу нельзя, т.к. софт обратно ничего не отдаст.

В этом случае я вижу два варианта:

1. Костыльный: всё также обходиться джобой, но внутрь сунуть sleep. Но это плохо.

2. Оптимальный: когда джоба берёт задание, делать пометку в базе о статусе (взята в работу) и передать в софт, дальше вернуть джобу в очередь. А при запуске джобы начинать чтение со статуса - если "новый" - передать в софт, а если "взято в работу" - проверить закончил ли софт её обрабатывать. Если ещё в работе, то просто возвращаем джобу в очередь до следующей итерации, а если софт выполнил/завалился - обновить статус на "завершено/завалено" и сообщить юзеру об этом.
источник

AH

Andrey Helldar in Laravel для начинающих
Andrey Helldar
Я понял нюанс. Джоба берётся из базы сайта и передаётся в софт. Получается, физически она в базе не существует и, поэтому, откатывать джобу нельзя, т.к. софт обратно ничего не отдаст.

В этом случае я вижу два варианта:

1. Костыльный: всё также обходиться джобой, но внутрь сунуть sleep. Но это плохо.

2. Оптимальный: когда джоба берёт задание, делать пометку в базе о статусе (взята в работу) и передать в софт, дальше вернуть джобу в очередь. А при запуске джобы начинать чтение со статуса - если "новый" - передать в софт, а если "взято в работу" - проверить закончил ли софт её обрабатывать. Если ещё в работе, то просто возвращаем джобу в очередь до следующей итерации, а если софт выполнил/завалился - обновить статус на "завершено/завалено" и сообщить юзеру об этом.
Почему плохо: представь бы гитхаб держал постоянно в синке эти данные. Он бы тогда завал.... а, ну да 😂
источник

AH

Andrey Helldar in Laravel для начинающих
Кстати о наболевшем:
источник

R#

Reset # Alexey S. in Laravel для начинающих
Andrey Helldar
Я понял нюанс. Джоба берётся из базы сайта и передаётся в софт. Получается, физически она в базе не существует и, поэтому, откатывать джобу нельзя, т.к. софт обратно ничего не отдаст.

В этом случае я вижу два варианта:

1. Костыльный: всё также обходиться джобой, но внутрь сунуть sleep. Но это плохо.

2. Оптимальный: когда джоба берёт задание, делать пометку в базе о статусе (взята в работу) и передать в софт, дальше вернуть джобу в очередь. А при запуске джобы начинать чтение со статуса - если "новый" - передать в софт, а если "взято в работу" - проверить закончил ли софт её обрабатывать. Если ещё в работе, то просто возвращаем джобу в очередь до следующей итерации, а если софт выполнил/завалился - обновить статус на "завершено/завалено" и сообщить юзеру об этом.
угу
но я взял костыльный по двум причинам
1й я это запилил на 6 месяц изучения ларавела, поэтому изначально это вообще даже не джоба была
2й это в целом усложняет саму логику понимания джобы
источник

AH

Andrey Helldar in Laravel для начинающих
При этом, здесь всё ещё плохо.
источник

AH

Andrey Helldar in Laravel для начинающих
Reset # Alexey S.
угу
но я взял костыльный по двум причинам
1й я это запилил на 6 месяц изучения ларавела, поэтому изначально это вообще даже не джоба была
2й это в целом усложняет саму логику понимания джобы
Знаешь, это как многие говорят "я не умею готовить" (еду), а, по факту, если положить перед человеком рецепт (читай "доку"), то он довольно быстро научится готовить (читай любое действие).
источник

AH

Andrey Helldar in Laravel для начинающих
Научиться варить яйца проще, чем борщ. Но если научишься варить борщ - это будет круто и легко в понимании.
С джобами тоже самое.
источник

R#

Reset # Alexey S. in Laravel для начинающих
ну я хреново готовлю, запороть по доке могу на изи.
поэтому похоже №1 это мой вариант
источник