Конечная цель
Цель состоит в том, чтобы мое приложение отправляло потенциально большое количество писем в очередь Redis (этот бит работает), а затем Redis ограничивает их обработку до заданного количества писем.Каждое выбранное количество минут.
Для этого примера у меня есть тестовое задание, которое добавляет время к файлу, и я пытаюсь уменьшить его до одного раза каждые 60 секунд.
История такПока ....
Пока у меня есть приложение, успешно помещающее тестовое количество из 50 заданий в очередь Redis.Я могу войти в Horizon и увидеть эти 50 заданий в очереди «processjob».Я также могу войти в Redis-Cli и увидеть 50 наборов под ключом списка "queues: processjob".
Моя проблема в том, что, как только я пытаюсь поставить газ, запускается только 1 задание иошибка rest со следующей ошибкой:
Predis \ Response \ ServerException: ERR Ошибка запуска сценария (вызов f_29cc07bd431ccbf64637e5dcb60484560fdfa2da): @user_script: 10: WRONGTYPE Операция с ключом, содержащим неправильный тип значения в /var / www / html / smhub / vendor / predis / predis / src / Client.php: 370
Если я уберу газ, все рабочие файлы и 5 заданий будут немедленно запущены.
Я подумал, что это может быть неправильное имя ключа, но если я изменю следующее:
public function handle()
{
//
Redis::throttle('queues:processjob')->allow(1)->every(60)->then(function(){
Storage::disk('local')->append('testFile.txt',date("Y-m-d H:i:s"));
}, function (){
return $this->release(10);
});
}
на следующее:
public function handle()
{
//
Redis::funnel('queues:processjob')->limit(1)->then(function(){
Storage::disk('local')->append('testFile.txt',date("Y-m-d H:i:s"));
}, function (){
return $this->release(10);
});
}
, тогда все будет работать нормально.
Мои мысли ...
Что-то подсказывает мне, что проблема в том, что ключ redis имеет тип "list" и что все задания находятся в одном списке.При этом, если бы это не сработало таким образом, как бы мы дросселировали очередь, поскольку для дросселя требуется уникальный ключ.