Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Laravel 5.x » Очереди и задачи » 17.11.2020 12:31:53

Mort
Ответов: 0

Прочитал кучу статей на заданную тему, но так и не понял, что, зачем и почему... Может кто-нибудь нормальным языком, как для дебила, рассказать, что нужно делать?

Есть, допустим, routes/api.php, где

Route::get ('/method1/{param}', 'SwController@m1');
...
Route::post('/method4', 'SwController@m4');
...

Есть SwController.php, где

public function m1 () { return Sw::method1($param); }
...
public function m4 (Request $request) { return Sw::method4($request->post()); }
...

ну и сама модель Sw, где в методах расписана сама логика

Допустим, api/method4 отрабатывает долго, минут 7 (там есть таймауты, так задумано, не надо предлагать оптимизацию). Соответственно, вызов последующего метода api/method1 будет ждать завершения предыдущего...

Если я хочу очереди, то надо в .env поменять драйвер очереди, создать таблицу БД для задач, сделать миграцию.
Ок,

QUEUE_DRIVER=database

php artisan make:job SwJob
php artisan queue:table
php artisan migrate

сделал...

Дальше начинаются вопросы... Надо в SwJob затолкать логику метода? Одного? Или как? Для каждого метода API создавать отдельный job? В контроллере вместо return сделать SwJob::dispatch()? Как быть с передаваемыми параметрами?

Прошу помощи...

#2 Re: Laravel 5.x » Несколько инстансов одного приложения с разными маршрутами - возможно? » 26.08.2020 12:49:16

дело не в ускорении, а в распределении очередей запросов. В итоге применил вариант 2, поверх прикрутил HAProxy, который фильтрует маршруты и балансит запросы по инстансам. Ответ увидел чуть позже, но всё равно спасибо smile

#3 Laravel 5.x » Несколько инстансов одного приложения с разными маршрутами - возможно? » 25.08.2020 19:16:48

Mort
Ответов: 2

Здравствуйте! Пишу некое API с кучей контроллеров, в каждом их которых десятки методов, и всё это варится в одном api.php.
Недавно стал замечать, что некоторые тяжелые методы тормозят работу остальных (например, есть метод опроса некоей PON-железки, занимает минуты 4 времени, и пока оно работает, другие, более простые запросы типа обращения к БД, стоят в очереди и курят).
Вижу пока два варианта решения:
1. Наплодить приложений. Плюсы: у каждой приложухи свои маршруты. Минусы: общий код (типа логгирования, обработки ошибок, дефайны общих констант) надо как-то поддерживать, что не гут; одинаковые ядра приложений и зависимости композера, что занимает место и память.
2. Запускать несколько инстансов одной и той же приложухи на разных портах. Минусы: одинаковые наборы маршрутов у каждого инстанса. Плюсы: экономия места и разработка в одном проекте.

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

Laravel 5.8, многого не знаю, будьте снисходительны! smile

Подвал раздела