在使用 Laravel 的開發中,佇列常常是不可或缺的一部分。它能夠極大的提升應用程式的並發處理能力,讓大量的任務能夠得到有效的管理和處理。但是在實際開發中,我們常常會遇到這樣一個問題:佇列不穩定,任務多時佇列突然停止了,或是任務出現異常時佇列也無法自動重新啟動。這時我們就需要一些技巧,讓隊列能夠穩定的運作下去。以下就介紹幾種方法,幫助大家解決這些問題。
一、supervisor 守護程式
supervisor 是一款用Python 寫的進程控制系統,是Linux 伺服器上管理進程的常見的工具,可以幫助我們在後台不停的監控一個進程,如果這個進程因某些原因退出了,那麼它能夠隨著宿主進程重新啟動。這就能保證你的隊伍一直能夠運作下去。
安裝supervisor
Centos 系統執行
yum install -y supervisor
Ubuntu 系統執行
#apt-get install -y supervisor
開啟設定檔
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
supervisorctl reload
啟動佇列
supervisorctl start laravel-queue
這樣就可以實現對佇列的守護程式了。如果佇列停止了,這個進程就會自動重啟,從而確保佇列一直在運作。當然,設定檔中也可以透過設定來運行多個 work 進程,提高佇列處理能力。
二、使用 Hashicorp 的 Nomad 整合 Marathon
Hashicorp 的 Nomad 與 Marathon 作業類似,它們都是用於分散式任務編排的一款開源的工具。 Nomad 透過抽象化任務的位置和決策,能夠對一組不同類型的任務進行編排。 Nomad 與 Marathon 相比具有高水準、使用者體驗度高、易於配置的優勢。
使用Nomad 需要docker 環境,如果你沒有安裝docker,可以先透過apt-get 安裝:
apt-get install -y docker.io
#建立Nomad Jobjob "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運行,在生產環境下根據實際情況進行修改。
AWS_ACCESS_KEY_ID=your_aws_access_key
AWS_SECRET_ACCESS_KEY=your_aws_secret_keyAWS_DEFAULT_REGION=us-west-2#.SQSm&m_wm_h_wm_ our_aws_secret_key 和your_queue_prefix 為你自己的。
啟動佇列
php artisan queue:work sqs --queue=default --tries=3 --sleep=3 --timeout=60
在本文中,我們介紹了幾種讓 Laravel 佇列一直執行的方法,透過守護進程、任務編排、第三方服務等方式,可以為佇列提供更穩定、高效的運作支援。每種方法都有各自的優點和適用範圍,具體選擇哪一種方法,需要根據自己的實際情況來做決策。
以上是laravel隊列如何一直執行的詳細內容。更多資訊請關注PHP中文網其他相關文章!