Как приостановить или задержать все задания в очереди Horizon - PullRequest
0 голосов
/ 29 августа 2018

Я довольно нов, когда дело доходит до Horizon и Queues, и я столкнулся с этой проблемой.

Я использую Horizon + Redis для своих очередей. Задания в очереди должны подключаться к удаленной службе и получать некоторые данные. Эта служба имеет некоторые ограничения на соединение (например, 5 запросов в минуту и ​​X запросов в час / день). Иногда он также может быть недоступен или недоступен для обслуживания.

Теперь у меня может быть много этих заданий в очереди (например, 10 КБ или даже больше). И после 5-го запроса в данную минуту (или каков фактический лимит) все оставшиеся попадания вернутся ложными, и мне просто придется их отложить.

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

Это создает две проблемы:

  1. Это задерживает много заданий, поэтому после 5 или 10 повторных попыток в итоге возникнет сбой, что приведет к массе неудачных заданий.
  2. Это приведет к ряду ненужных подключений к услуге, которые я уже исчерпал. Некоторым службам это не нравится, и они будут еще больше задерживать ...

Было бы хорошо, если бы я мог как-то приостановить все задания в данной очереди или просто занять 5 заданий в минуту. Худшее решение, вероятно, это просто sleep () в течение 25 секунд, но событие hat не сработает, если будет более одного работника.

Я пытался использовать дросселирование redis:

Redis::throttle('key')->allow(10)->every(60)->then(function () {
    // Job logic...
}, function () {
    // Could not obtain lock...

    return $this->release(10);
});

но я либо что-то сделал не так (настройка ключа), либо что-то в этом роде, но после того, как первые 10 заданий будут выполнены в минуту, другие просто откладываются с выпуском (10), и у меня возникает та же проблема, что и описанная выше.

Я уверен, что у кого-то была такая проблема, и мне любопытно, как правильно подойти к этому.

Заранее спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...