ホームページ  >  記事  >  PHPフレームワーク  >  Laravelキューを常に実行する方法

Laravelキューを常に実行する方法

王林
王林オリジナル
2023-05-21 09:45:071115ブラウズ

Laravel を使用した開発では、多くの場合、キューが重要な部分になります。アプリケーションの同時処理能力が大幅に向上し、多数のタスクを効果的に管理および処理できるようになります。しかし、実際の開発では、キューが不安定だったり、タスクが多いとキューが突然止まってしまったり、タスクで例外が発生してもキューが自動的に再起動できなかったりといった問題に遭遇することがよくあります。現時点では、キューを安定して実行できるようにするためのスキルが必要です。これらの問題を解決するのに役立ついくつかの方法を次に示します。

1. スーパーバイザー デーモン プロセス

スーパーバイザーは、Python で書かれたプロセス制御システムです。Linux サーバー上のプロセスを管理するための一般的なツールです。バックグラウンドで実行し続けるのに役立ちます。モニタープロセスが何らかの理由で終了した場合、ホスト プロセスで再起動できます。これにより、キューを常に実行できるようになります。

スーパーバイザーのインストール

Centos システムの実行

yum install -y スーパーバイザー

Ubuntu システムの実行

apt-get install -y スーパーバイザー

設定ファイルを開きます

vim /etc/supervisord.conf

laravel-queue 設定セクションを追加します

[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

説明:

  • プログラム: プロセスの名前を定義します
  • コマンド: 実行中のコマンドを定義します
  • autostart: ブート時に自動開始
  • autorestart: 自動再起動
  • user: プロセスを実行しているユーザー

変更を保存して構成をロード

supervisorctl reload

キューの開始

supervisorctl start laravel-queue

この方法で、キューのデーモンプロセスを実装できます。キューが停止した場合、プロセスは自動的に再起動され、キューが常に実行されるようになります。もちろん、構成ファイル内の構成を通じて複数のワークプロセスを実行して、キュー処理機能を向上させることもできます。

2. Hashicorp の Nomad を使用してマラソンを統合する

Hashicorp の Nomad は、Marathon と同様に動作し、どちらも分散タスク オーケストレーション用のオープン ソース ツールです。 Nomad は、場所と決定を抽象化することで、さまざまな種類のタスクのセットを調整できます。 Marathon と比較して、Nomad には軽量、高いユーザー エクスペリエンス、簡単な設定という利点があります。

Nomad を使用するには docker 環境が必要です。docker をインストールしていない場合は、最初に apt-get を通じてインストールできます:

apt-get install -y docker.io

  1. ノマド ジョブの作成

プロジェクト ルート ディレクトリに job.nomad ファイルを作成し、設定を通じてノマド ジョブを作成します:

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"
  }
}

}
}

上記の設定ファイルは docker を使用しますスタンドアロンモードで実行し、本番環境の実際の状況に応じて変更します。

  1. Nomad ジョブの開始

次のコマンドを実行して Nomad ジョブを開始します:

nomad run job.nomad

これで完了です。キューの開始。 Nomad はノード上でジョブを実行し、同時にジョブを監視できます。タスクに問題が発生した場合、Nomad はすぐにタスクを再起動してステータスを更新できます。 Nomad Job はクラスター内の異なるノード間を自動的に移行できるため、特定のノードの負荷が軽減され、アプリケーション全体の堅牢性が向上します。

3. AWS SQS の使用

AWS の SQS (Simple Queue Service) は、分散アプリケーション間でメッセージを効率的に配信および処理できるメッセージ キューのサービスであり、メッセージ処理の水平スケーリングを可能にします。アプリケーション間の機能。 Laravel フレームワークでは、SQS をアプリケーションに簡単に統合でき、SQS をサポートする Laravel Queue パッケージをインストールするだけで済みます。一方、AWS SQS では各キューには最小ライフサイクル (TTL) があり、この期間内に正常に実行されなかった場合、タスクは SQS によって削除されます。これにより、タスクが最終的に正常に実行されることが保証されます。

SQS のインストール

SQS を Laravel に統合するのは比較的簡単で、SQS をサポートする Laravel Queue パッケージをインストールするだけです。 Composer を通じて直接インストールできます:

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

Configure SQS

次のコンテンツを .env 設定に追加します。 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

your_aws_access_key、your_aws_secret_key を置き換えますそしてあなたの_queue_prefixは私自身のものです。

Start queue

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

上記のコマンドは、 start SQS キューで、デフォルトのデフォルト キューを使用します。 --tries パラメータはキュー タスクのエラー試行回数を示し、--sleep はキューがタスクを処理した後の休止時間を示し、--timeout は自動キュータスクがタイムアウトしたときの再試行時間。キューは継続的にループしてタスクを取得し、実行します。

エラーが発生すると、キュー タスクのエラー試行回数がなくなるか実行が成功するまで、キューは自動的に再試行します。

要約

この記事では、Laravel キューの実行を維持するためのいくつかの方法を紹介します。デーモン プロセス、タスク オーケストレーション、サードパーティ サービスなどを通じて、キューのより安定した効率的な運用サポートを提供できます。各方法には独自の利点と適用範囲があり、どの方法を選択するかは実際の状況によって異なります。

以上がLaravelキューを常に実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。