I recently switched a client site to use AWS SQS as the queue provider instead of a database to speed things up a bit. After creating a standard Queue in SQS, adding the AWS SQS credentials to the config/queue.php file per Laravel’s documentation, and updating the QUEUE_DRIVER in the .env file, I could see that the jobs were being sent to the SQS queue but they were not being processed by the application.
I finally figured out the solution. It involves 2 simple steps: modify the supervisor configuration file and then update and restart supervisor.
Step 1: Update Supervisor Configuration File
The application was using Supervisor to automate the processing of the queue. The supervisor configuration files are typically located in /etc/supervisor/conf.d. The default configuration file within this directory tends to be called laravel-worker.conf. The laravel-worker.conf file contained the following line:
command=php /var/www/html/artisan queue:work database --sleep=3 --tries=3
In this file, I had to change the queue:work database
portion of the command
line to reflect the new SQS queue connection. See the updated line below:
command=php /var/www/html/artisan queue:work sqs --sleep=3 --tries=3
You could use these directions to switch to any queue connection. The key is to update the `queue:work sqs` portion of the command directive in your configuration file to use the new queue connection.
Step 2: Update and Restart Supervisor
After I updated that supervisor configuration file, I had to run the following commands to update Supervisor and restart the queue processing:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl restart all
This worked like a charm for me, but if you need some additional information on configuring Supervisor, make sure you have completed the following steps:
- create your standard queue in SQS
- update your config/queue.php file to use your SQS credentials (add more environment variables to your .env file and reference them in the config/queue.php file)
- update your QUEUE_DRIVER in your .env, so it’s set to QUEUE_DRIVER=SQS
- update your supervisor configuration file (typically /etc/supervisor/conf.d/laravel-worker.conf)
- update and restart supervisor
If you still haven’t been able to get it to work, check out Laravel’s documentation.