Home >PHP Framework >Laravel >How to execute laravel queue all the time

How to execute laravel queue all the time

王林
王林Original
2023-05-21 09:45:071160browse

In development using Laravel, queues are often an essential part. It can greatly improve the concurrent processing capabilities of applications, allowing a large number of tasks to be effectively managed and processed. However, in actual development, we often encounter such a problem: the queue is unstable, the queue suddenly stops when there are many tasks, or the queue cannot automatically restart when an exception occurs in the task. At this time we need some skills to enable the queue to run stably. Here are several methods to help you solve these problems.

1. Supervisor daemon process

Supervisor is a process control system written in Python. It is a common tool for managing processes on Linux servers. It can help us keep running in the background. Monitor a process. If the process exits for some reason, it can be restarted with the host process. This ensures that your queue can always run.

Install supervisor

Centos system execution

yum install -y supervisor

Ubuntu system execution

apt-get install -y supervisor

Open the configuration file

vim /etc/supervisord.conf

Add our laravel-queue configuration section

[program:laravel-queue]
command=php /path/to/artisan queue:work redis --sleep=3 --tries=3
directory=/path/to/your/project
autostart=true
autorestart=true
user=www-data

Description:

  • program: Define the name of the process
  • command: Define the running command
  • autostart: Auto-start at boot
  • autorestart: Automatic restart
  • user: The user running the process

Save the modification and load the configuration

supervisorctl reload

Start the queue

supervisorctl start laravel-queue

This way you can implement the daemon process for the queue. If the queue stops, the process will automatically restart to ensure that the queue is always running. Of course, you can also run multiple work processes through configuration in the configuration file to improve queue processing capabilities.

2. Use Hashicorp’s Nomad to integrate Marathon

Hashicorp’s Nomad operates similarly to Marathon. They are both open source tools for distributed task orchestration. Nomad is able to orchestrate a set of different types of tasks by abstracting their location and decisions. Compared with Marathon, Nomad has the advantages of lightweight, high user experience, and easy configuration.

Using Nomad requires a docker environment. If you have not installed docker, you can install it through apt-get first:

apt-get install -y docker.io

  1. Create a Nomad Job

Create the job.nomad file in the project root directory and create a Nomad Job through configuration:

job "laravel_app" {
datacenters = ["dc1" ]
type = "service"

group "app" {

task "laravel-queue" {
  driver = "docker"

  config {
    image = "your_docker_image"
    command = ["php", "artisan", "queue:work", "--tries", "1", "--timeout", "30"]
    args = [
      "--queue=critical,high,default,email,chat,sms",
      "--sleep=3"
    ]
    ports = ["http"]
  }

  resources {
    cpu    = 500
    memory = 128
    network {
      mbits = 10
      port "http" {}
    }
  }

  service {
    name = "laravel-queue"
    port = "http"
    check {
      type     = "http"
      path     = "/status"
      interval = "10s"
      timeout  = "2s"
    }
  }

  restart {
    attempts = 10
    interval = "5m"
    delay    = "25s"
    mode     = "failures"
  }
}

}
}

The above configuration file uses docker in stand-alone mode Run it and modify it according to the actual situation in the production environment.

  1. Start Nomad Job

Execute the following command to start Nomad Job:

nomad run job.nomad

That’s it. The start of the queue. Nomad will run our job on a node and can monitor the job at the same time; when a problem occurs with the task, Nomad can quickly restart the task and update the status. Nomad Job can automatically migrate between different nodes in the cluster, which can reduce the load on a certain node and improve the robustness of the overall application.

3. Using AWS SQS

AWS's SQS (Simple Queue Service) is a service for message queues, which can efficiently deliver and process messages between distributed applications. , and allows horizontal scaling of message processing capabilities between applications. In the Laravel framework, SQS can be easily integrated into our applications. We only need to install the Laravel Queue package that supports SQS. At the same time, in AWS SQS, each queue has a minimum life cycle (TTL). If it is not successfully executed within this time period, the task will be deleted by SQS. This ensures that a task will eventually be executed successfully.

Installing SQS

Integrating SQS in Laravel is relatively simple. You only need to install the Laravel Queue package that supports SQS. It can be installed directly through Composer:

composer require "aws/aws-sdk-php ^3.0"

Configure SQS

Add the following content to the .env configuration file:

QUEUE_DRIVER=sqs
AWS_ACCESS_KEY_ID=your_aws_access_key
AWS_SECRET_ACCESS_KEY=your_aws_secret_key
AWS_DEFAULT_REGION=us-west-2
SQS_PREFIX=your_queue_prefix

Replace your_aws_access_key, your_aws_secre t_key and your_queue_prefix for you my own.

Start queue

php artisan queue:work sqs --queue=default --tries=3 --sleep=3 --timeout=60

The above command will start An SQS queue, and uses the default default queue, where the --tries parameter indicates the number of error attempts for the queue task, --sleep indicates the rest time after the queue processes the task, and --timeout indicates the automatic retry time when the queue task times out. The queue will continuously loop to obtain tasks and execute them:

When an error occurs, the queue will automatically retry until the number of error attempts of the queue task is exhausted or the execution is successful.

Summarize

In this article, we introduce several methods to keep the Laravel queue executing. Through daemon processes, task orchestration, third-party services, etc., we can provide more stable and efficient operation support for the queue. Each method has its own advantages and scope of application. Which method to choose depends on your actual situation.

The above is the detailed content of How to execute laravel queue all the time. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn