yii2-queue icon indicating copy to clipboard operation
yii2-queue copied to clipboard

How to make repeated attempts with progressive delay?

Open paulzi opened this issue 7 years ago • 25 comments

I want to make each retry attempt each time more delayed. However, I could not do it, because there is no delay property in ErrorEvent:

Yii::$app->queue->on(Queue::EVENT_AFTER_ERROR, function (ErrorEvent $event) {
    if ($event->job instanceof SomeJob) {
        //$event->delay = $event->attempt * 30; // there I want to set delay based on attempt
        $event->retry = $event->attempt < 5;
    }
});

It would also be nice to add in the RetryableJob method getRetryDelay:

public function getRetryDelay($attempt, $error)
{
    return $attempt * 30;
}

paulzi avatar Oct 04 '17 09:10 paulzi

I also encountered this problem #172

pgyf avatar Nov 22 '17 01:11 pgyf

+1 I use :

'on afterError' => function (\yii\queue\ErrorEvent $event) {
      $event->ttr = $event->attempt * 2;
},

but job log ttr: 2, 4, 8, 8, 8, 8.....

dawnBefore avatar Dec 12 '17 07:12 dawnBefore

As a temporary solution

class ProgressiveQueue extends yii\queue\db\Queue
{
    protected function reserve()
    {
        $payload = parent::reserve();
        $this->db->createCommand()->update($this->tableName,
            ['ttr' => $payload['ttr'] * 2],
            ['id' => $payload['id']]
        )->execute();
        return $payload;
    }
}

paulzi avatar Mar 14 '18 12:03 paulzi

+1 for the getRetryDelay

metalagman avatar Sep 11 '18 06:09 metalagman

А воз и ныне там...

How to make repeated attempts with progressive delay? Are you may add function getRetryDelay?

I use AMQP Interop, so example

$this->db->createCommand()

is unreal... as I think )

lgXenos avatar Oct 25 '18 06:10 lgXenos

Ребята, можно же в симфони контрибьютить или в ларавель, зачем вы свои велосипеды делаете? С 2017 года элементарный вопрос не решен (как и 9000 других) рукалицо.жпг

Только учите плохому новичков, которые ваши велосипеды продают заказчикам, а потом всё это добро не понятно как поддерживать. Лучи ненависти.

futuster avatar Apr 01 '21 10:04 futuster

@futuster уже бы давно сделали и послали pull request.

samdark avatar Apr 01 '21 10:04 samdark

@futuster уже бы давно сделали и послали pull request.

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

Делать пуллреквесты в фреймворк который был выпущен со словами "вот вам версия 2, мы в ней ничего делать не будем, потому что будем делать версию 3" самая бессмысленная трата времени и сил. По ресурсозатрам мне проще выкинуть ваши очереди и взять нормальные.

futuster avatar Apr 01 '21 10:04 futuster

Бомбануло так бомбануло) В целом, конечно, развитие yii затянулось, и интерес к нему у сообщества существенно упал.

paulzi avatar Apr 01 '21 12:04 paulzi

В 2012 выбирал пхп-фреймворк и попробовал все, включая yii первой версии. В тот момент показалось, что данное изделие является конкурентом вордпресса. Вторая версия часть болячек вылечила, но добавилось "мы не тратим ресурсы на вторую версию, а делаем третью". И эту мантру, как мне кажется, я слышу с момента выхода второй версии.

Проблема исключительно в том, что на главной странице нет дисклеймера: "НЕ ПОДХОДИТ ДЛЯ ПРОЕКТОВ С ЖИЗНЕННЫМ ЦИКЛОМ ЧУТЬ БОЛЬШЕ ЧЕМ ХЕРАК-ХЕРАХ И В ПРОДАКШН".

futuster avatar Apr 01 '21 13:04 futuster

@futuster обсуждение больше подходит для форума или флудилки в телеграм. Но раз уж надо рассказать, расскажу:

Ребята, можно же в симфони контрибьютить или в ларавель, зачем вы свои велосипеды делаете?

С такой логикой ни Symfony 2 ни Laravel не было бы вообще. Если надо хронологию напомнить, то вот: https://www.jetbrains.com/ru-ru/lp/php-25/

Нет ресурсов сделать хорошо - не делайте никак.

Ресурсы сделать хорошо есть. Нет ресурсов сделать всё и сразу.

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

Мы ничего никому не "втюхиваем". Никакого активного маркетинга, откатов, отдела продажников. Ничего этого нет.

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

Потребительское отношение к OpenSource и непонимание того, зачем он нужен и что из себя представляет — это печально, но распространено. Я уже не удивляюсь.

Зачем OpenSource? Чтобы вместе решать общие проблемы и вместе делать удобный себе и остальным инструмент. Если всё-равно пилить своё решение, то зачем пилить его одному? Вместе можно сделать больше, заметить больше косяков (вот меня лично именно этот issue в продакшн-проектах не настигал пока ни разу, так что я не сильно горю желанием его править, тем более воспроизвести не на чем), придумать лучше решения, написать ненавистную вам документацию силами тех, кто её писать любит и так далее.

Делать пуллреквесты в фреймворк который был выпущен со словами "вот вам версия 2, мы в ней ничего делать не будем, потому что будем делать версию 3" самая бессмысленная трата времени и сил. По ресурсозатрам мне проще выкинуть ваши очереди и взять нормальные.

Yii 2 был выпущен в 2014-ом и поддерживается до сих пор. Кстати, так же как и Yii 1: https://www.yiiframework.com/release-cycle. Настолько долгой поддержки вы в принципе не встретите ни в одном фреймворке. На тему "ничего делать не будем" неправда: https://github.com/yiisoft/yii2/blob/master/framework/CHANGELOG.md

Если для вас "элементарный вопрос" решается значительно дольше, чем переход на другую библиотеку очередей, то переходите, конечно. С точки зрения расходования ресурсов компании, на которую вы работаете, это будет правильным решением (по крайней мере в краткосрочной перспективе).

"НЕ ПОДХОДИТ ДЛЯ ПРОЕКТОВ С ЖИЗНЕННЫМ ЦИКЛОМ ЧУТЬ БОЛЬШЕ ЧЕМ ХЕРАК-ХЕРАХ И В ПРОДАКШН".

Ну, это просто-напросто не так. На Yii работают и развиваются в течение длительного времени, например, ТАСС, Связной и DNS. У всех них далеко не чик-чик и в продакшн.

samdark avatar Apr 01 '21 20:04 samdark

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

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

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

Я тут у вас в гостях и переходить на личности не хочется, как и забрасывать вас ссылками. Но пройти мимо морализаторства и рассуждений о потребительском отношении не могу.

Мы тут все взрослые люди, поэтому пожалуйста оставьте проповеди в духе Столлмана. Вы занимаетесь опенсорсом, потому что находите в этом коммерческий интерес. Занимаетесь вы прямыми продажами, или получаете косвенную прибыль от книг/курсов/конференций/повышения авторитета - значения не имеет. Обвинять кого-то в потребительском отношении как минимум странно, а как максимум можно нарваться. На мой взгляд у вас потребительское отношение к своему комьюнити, о чем я и сказал.

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

Моё мнение за 10 лет не изменилось - yii не подходит ни для чего сложнее сайта-визитки. А сравнить есть с чем, только за последние три года я успел поработал с django, spring, symfony, laravel, RoR и nestjs.

Всего вам доброго.

futuster avatar Apr 02 '21 08:04 futuster

Могу ошибаться, но на сколько помню, о 3 версии вы заговорили сразу после выхода 2.

Нет. Далеко нет. О ней я заговорил в 2019-ом.

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

Ресурсов делать одновременно всё нет, я никогда не говорил об обратном. Это на данный момент не коммерческий проект. Дополнительное время покрывается исключительно фондом разработки, где не сказать чтобы прямо всё хорошо было. Но и говорить что ресурсов нет и всё встало тоже будет не правдой. Движемся в нужном направлении.

Про компонент форм не понял. Валидация вроде выделена с самого начала в отдельный пакет. От требования реализовывать какой-то интерфейс у данных мы тоже уже ушли. Были какие-то ещё мнения в сообществе? Если да — покажите, сделаем issue и займёся. Конструктивные предложения мы никогда осознанно не игнорировали и не планируем.

Мы тут все взрослые люди, поэтому пожалуйста оставьте проповеди в духе Столлмана. Вы занимаетесь опенсорсом, потому что находите в этом коммерческий интерес.

Нет. Коммерческого интереса тут нет, разве что мысли как это всё развить впоследствии в проект, который может сам себя прокормить. На позиции коммерческого разработчика, если уж считать деньги, было "вкуснее" раз в 8 минимум. OpenSource тут, скорее, жертва ради сообщества и занятия любимым делом.

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

Курсов не веду. Книги — это больше альтруистическое, на гонорар с них даже прожить нельзя если ты не Роулинг. Затраченное время, опять же, чисто финансово, не окупается никаким образом.

Повышение авторитета — да, как бонус прилагается. Это не самоцель.

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

Про потребительское отношение к OpenSource — это факт. Подавляющее большинство рассматривает OpenSource ровно так же, как коммерческий продукт, которым он не является и функционирут совсем по-другому. Ну и соответственно предъявляет требования как к коммерческому продукту. Я это иногда пытаюсь донести, но, в общем, с этим я смирился. Это очень распространённое заблуждение, а не атака лично на вас.

Про потребительское отношение к сообществу частично согласился бы если бы это всё было чисто коммерческой затеей и каждый пользователь фреймворка платил бы за доработки. Тогда предложение "Нашёл баг и он критичный для всех? Хочешь чтобы его исправили быстро? Попробуй сделать сам и заслать PR." было бы как минимум наплевательским отношением к клиенту. Но OpenSource — это чаще всего не отношения продавец-клиент и требовать чего-либо не вполне уместно. Вложиться временем и вместе сделать — это завсегда, а сидеть 24/7 на саппорте при этом не получая за это зарплату... нет, спасибо.

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

Откуда такие фантазии?

  1. У нас сейчас одна из самых сильных команд за всю историю проекта: https://www.yiiframework.com/team. Да, фокус на Yii 3, но Yii 2 тоже не бросаем.
  2. Сообщество активно помогает что Yii 3, что Yii 2. Посмотрите на авторов в том же https://github.com/yiisoft/yii2/blob/master/framework/CHANGELOG.md. Если бы там был везде я, согласился бы полностью.

Моё мнение за 10 лет не изменилось - yii не подходит ни для чего сложнее сайта-визитки. А сравнить есть с чем, только за последние три года я успел поработал с django, spring, symfony, laravel, RoR и nestjs.

Ну то есть проекты вроде приведённых мной выше (и многих других) — это парадокс и они не Yii невозможны? У меня тоже есть опыт работы с теми же Spring, Struts, Symfony и так далее и дело всегда не в фреймворке, а в том, кто на нём разрабатывает.

samdark avatar Apr 02 '21 10:04 samdark

Мы сделали на Yii 1 и Zend 1 проект который взлетел, стал топом в своем регионе, имел сотни девелоперов, был продан за $многолярдов корпорации из Топ10. Караван идет.

AskAlexSharov avatar Apr 02 '21 12:04 AskAlexSharov

Мы сделали на Yii 1 и Zend 1 проект который взлетел, стал топом в своем регионе, имел сотни девелоперов, был продан за $многолярдов корпорации из Топ10. Караван идет.

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

Я не утверждал, что на yii невозможно сделать что-то сложное, моё мнение - что это не подходящий инструмент для больших проектов. А так вам никто не запрещает и на голом пхп разрабатывать сколь угодно сложные вещи.

Александр прав, здесь явно не подходящее место для подобных дискуссий.

По теме:

SomeJob extends BaseObject implements JobInterface {
    public function execute($queue){
        try {
            // ...
        } catch (Exception $e){
            $queue->delay(3600)->push(new self())
        }
    }
}

Опустил прогрессивное увеличение задержки и кол-во повторов, но проблему это решает.

futuster avatar Apr 02 '21 15:04 futuster

Вставлю свои пять копеек для истории. :smirk:

Я не понимаю, почему люди выдвигают какие-то, претензии к OpenSource продуктам? Тут же всё просто, не нравится, не подходит под твои задачи, не используй, либо предложи исправления и/или улучшения в виде PR. А если уж используешь, спасибо скажи команде разработчиков за инструмент. Вон, @maxodrom не писал где-то претензии к переводу документации yii, а взял и предложил PR с переводом и таких я уверен много.

Я не утверждал, что на yii невозможно сделать что-то сложное, моё мнение - что это не подходящий инструмент для больших проектов. А так вам никто не запрещает и на голом пхп разрабатывать сколь угодно сложные вещи.

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

Так что, спасибо Александру Макарову, Константину Сироткину, Андею Васильеву и всем остальным участникам команды Yii за разработку.

c7v avatar Apr 02 '21 17:04 c7v

претензии к OpenSource продуктам?

Претензия не к продукту и не к авторам, а к позиционированию продукта.

Тут же всё просто, не нравится, не подходит под твои задачи, не используй однако да, вам никто не запрещает воспользоваться чем-то другим

Проекты написанные другими людьми не всегда целесообразно переписывать.

futuster avatar Apr 03 '21 00:04 futuster

Ну то есть проекты вроде приведённых мной выше (и многих других) — это парадокс и они не Yii невозможны? У меня тоже есть опыт работы с теми же Spring, Struts, Symfony и так далее и дело всегда не в фреймворке, а в том, кто на нём разрабатывает.

С моей точки зрения, днс это всего лишь интернет магазин. Учитывая их размер задача в любом случае нетривиальная, но там нет сложной бизнес логики. Это достаточно простой проект.

Я же говорю про другие проекты. Боль и страдания связанны с тем, что для проекта с огромной и разветвленной бизнес-логикой выбрали фреймворк больше подходящий для интернет-магазинов. Там где просится DDD и CQRS у нас божественные объекты, синглтоны и актив рекорд с валидацией в одном классе.

Каждой задаче свой инструмент, и я не сомневаюсь, что на ряде задач yii - прекрасное решение. Но утверждать, что yii подходит для любых задач, надеюсь, никто не станет.

Ну и соответственно предъявляет требования как к коммерческому продукту.

Лично я не предъявляю вам требований, я высказываю мнение, что вы необоснованно расширяете свою целевую аудиторию.

Если обратная связь имеет ценность для авторов - прекрасно. Если обратная связь воспринимается авторами как наезд и конструктивной ценности не имеет - прошу прощения, не хотел никого обидеть.

futuster avatar Apr 03 '21 01:04 futuster

Боль и страдания связанны с тем, что для проекта с огромной и разветвленной бизнес-логикой выбрали фреймворк больше подходящий для интернет-магазинов. Там где просится DDD и CQRS у нас божественные объекты, синглтоны и актив рекорд с валидацией в одном классе.

Если человек для серьёзного большого проекта где нужно DDD и CQRS выбрал фреймворк, основываясь только на каком-то описании - то его профессиональные навыки вызывают большое сомнение

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

Если обратная связь воспринимается авторами как наезд и конструктивной ценности не имеет

Нет ресурсов сделать хорошо - не делайте никак. Вы же втюхиваете разработчикам откровенно сырое и не поддерживаемое авторами решение

Проблема исключительно в том, что на главной странице нет дисклеймера: "НЕ ПОДХОДИТ ДЛЯ ПРОЕКТОВ С ЖИЗНЕННЫМ ЦИКЛОМ ЧУТЬ БОЛЬШЕ ЧЕМ ХЕРАК-ХЕРАХ И В ПРОДАКШН".

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

вы необоснованно расширяете свою целевую аудиторию.

А где-то большими буквами написано, что yii идеален для DDD, CQRS и больших сложных проектов?

Insolita avatar Apr 03 '21 03:04 Insolita

то его профессиональные навыки вызывают большое сомнение это проблемы бизнеса.

Вы мастер поиска виноватых.

С ваших слов я так понял нужно облить бизнес и предыдущих разработчиков освежающим потоком комплиментов и пройти мимо?

futuster avatar Apr 03 '21 10:04 futuster

Работал много лет с Yii 1/2 и запускали и много стартапов и для Fortune 500 компаний делали проекты и все отлично. Смысла хейта вообще не вижу. Yii отличный инструмент и много людей знаю которые тоже на нем достаточно серьезные продукты делают которые приносят хорошую прибыль.

В боевых условиях рынка что бы стартапу сразу начинать с DDD/CQRS это очень большой оверхед. Особенно боль в подборе разработчиков в вменяемый рыночный бюджет. А про порог входа который взлетает значительно выше средне-рыночного уровня вообще упоминать не стоит.

Огромный респект @samdark и команде!

Работал и на Yii, Zend, Symfony, Laravel, Magento, Express, Sails.JS, Koa.JS, Loopback...

Yii очень приятный и понятный в работе фреймворк. Да сейчас есть вопрос что ждем 3ю версию но очень надеюсь что она зайдет и обрастет комьюнити и плагинами :)

tuxoff avatar Apr 05 '21 18:04 tuxoff

Главное - "по теме" обсуждение архитектуры и бизнеса... Чувствую пока не отпишусь от этого треда - так и будет "мыши кололись, но продолжали есть кактус"

Не нравится - не ешь. Делов то...

lgXenos avatar Apr 05 '21 18:04 lgXenos

Согласен, что выбранный тон был ошибкой. Это не отменяет необходимости объяснять новичкам, что такое RAD-фреймворк, для чего он подходит, а для чего нет.

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

Если ваш инструментарий состоит из синглтонов и актив рекорда, то ваш инструментарий не подходит для энтерпрайза. Это всё, что я пытался донести.

futuster avatar Apr 06 '21 10:04 futuster

@paulzi With the ExecEvent (since 2.1.1) thrown for EVENT_AFTER_ERROR, attempts and retries are now available on the event object. Believe this could now be closed unless we want to leave it open for the possibility of adding getRetryDelay to the job class?

acorncom avatar May 09 '22 08:05 acorncom

I recommend reopening this issue because the problem does not seem to be resolved yet, or not at least for the db driver.

The problem is, that any changes to the ExecEvent in the EVENT_AFTER_ERROR event get lost. So there is no clean way to update neither the ttr nor the delay value of the job.

One way I see is to update the database directly from my EVENT_AFTER_ERROR handler, but that would be a violation of the responsibilities.

Also updating the ttr value after the job has been already reserved would add a one cycle delay to the ttr, which can be very confusing for many.

mrbig avatar Feb 05 '23 15:02 mrbig