The becoming approach to run laravel queue employee in manufacturing?
if ($checkCurrentRunnigGame)
return once more()->with('error', 'Recreation is already working.');
dispatch(new RunGameJob)->onQueue(‘default’);
return redirect()->to(‘dashboard’)
->with(‘success’, ‘Recreation start effectively.’);
As an illustration, the job “RunGameJob” takes e.g. 2 minutes so no individual wants their browser to attend for 2 minutes everybody wants 250ms and why not? So we use queues proper right here which take care of the roles throughout the background and later and the best way lots later? That’s an fascinating question. I will reply this nevertheless first, we see how we run queue worker.
php artisan queue:work
This command runs the queue worker and the queue worker instantly checks for any jobs throughout the jobs desk and runs these jobs.
Suppose you run this throughout the terminal and in the intervening time there usually are not any jobs throughout the jobs desk so the queue worker sits and waits for the job. This works high-quality until we shut the terminal on account of in manufacturing we’re capable of’t sit for our complete life opening that terminal. Now we’ve got completely different points to do. There are two choices to resolve this downside.
- Cron Job
- Supervisor
First, we’re going to focus on regarding the cron job. This function runs that queue worker command after some time. It’s as a lot as you the best way lots time you want to wait your client to get data. As an illustration, if the admin begins the game “RunGameJob” and likewise you want to run that job instantly with none delay.
Artisan::command('queue:worker')->everyMinute();
It’ll run the queue worker every minute this method is good nevertheless one drawback is concurrency Factors: If the queue worker is already processing jobs when the scheduled command is executed as soon as extra, it might finish in concurrency factors. A variety of instances of the queue worker may be making an attempt to course of the similar job concurrently, leading to shocking behaviour or errors.
So there could also be one different resolution to take care of this case which is supervisor. The supervisor is an working system issue, not a laravel issue. So take observe now we’re using an working system to resolve our downside. Let’s rephrase our requirement in straightforward phrases sooner than leaping in.
We want that queue worker to run and if it stops then restart it.
To place in Supervisor in your server, you probably can take advantage of two methods:
1. Benefit from the terminal immediately on the web server.
2. Make use of SSH to entry and arrange Supervisor.
sudo apt-get arrange supervisor
It’ll arrange the supervisor in your server.
Subsequent, generate a file named laravel-worker.conf contained in the /and so forth/supervisor/conf.d itemizing. It’s best to remain to this convention when naming directories and knowledge, nevertheless you probably can change them if wished.
Content material materials to write down down throughout the file are:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php //pathto your endeavor// /artisan queue:work
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
client= // username in keeping with you probably root//
numprocs=1
redirect_stderr=true
stdout_logfile=/home/forge/app.com/worker.log
stopwaitsecs=3600
stdout_logfile=/var/log/laravel-worker.log
The supplied content material materials have to be written into the laravel-worker.conf file, save, after which execute the following directions:
sudo supervisorctl reread
sudo supervisorctl exchange
sudo supervisorctl start “laravel-worker:*”
Undoubtedly.
Be at liberty to proceed. Nonetheless, whenever you encounter any exceptions, on account of there are on a regular basis exceptions. One such exception might very properly be “laravel-worker: ERROR (no such group).”
It’ll occur in case your supervisor unable to detect your “laravel-worker.conf” file. To unravel this downside add the beneath code to supervisord.conf file which is located in /and so forth itemizing almost certainly.
[include]
data = supervisor/conf.d/*.conf
Enjoy and keep coding ❤️