Alat Pengurusan Baris Horizon
- configuration
- Konfigurasi Balanced
- Task memangkas irmyboard keizinan
Laravel Horizon
- Pengenalan
- Pemasangan
- Teg
- Pemberitahuan
- Metrik
🎜Pemasangan
{nota} Anda hendaklah memastikan bahawa pemacu baris gilir
redis
ditetapkan dalam fail konfigurasiqueue
.queue
配置文件中设置了redis
队列驱动。你应该使用 Composer 来安为你的 Laravel 项目安装 Horizon:
composer require laravel/horizon
安装完成后,使用
horizon:install
发布 Artisan 命令:php artisan horizon:install
你还应该创建
failed_jobs
表,Laravel 将使用该表来存储任何 失败的队列任务:php artisan queue:failed-table php artisan migrate
配置
发布 Horizon 相关文件后,他的主要配置文件会放在
config/horizon.php
。你可以在这个文件中配置队列相关选项,并且每个配置项都有详细的使用说明,请详细阅读此文件。均衡配置
Horizon 提供了三种均衡策略:
simple
,auto
, 和false
。默认的是simple
, 会将收到的任务均分给队列进程:'balance' => 'simple',
auto
策略会根据当前的工作量调整每个队列的工作进程任务数量。例如:如果notifications
队列有 1000 个待执行任务,但是你的render
队列是空的,Horizon 会分配更多的工作进程给notifications
队列,直到notifications
队列中所有任务执行完成。当配置项balance
配置为false
时,Horizon 会使用 Laravel 默认执行行为,它将按照配置中列出的顺序处理队列任务。任务修整
horizon
配置文件允许你配置应保留最近和失败任务的时间(以分钟为单位)。 默认情况下,最近的任务保留一小时,而失败的任务保留一周:'trim' => [ 'recent' => 60, 'failed' => 10080, ],
仪表盘权限验证
Horizon 仪表盘路由是
/horizon
。 默认情况下,你只能在local
环境下访问仪表盘。在你的app/Providers/HorizonServiceProvider.php
文件中,有一个gate
方法。这里授权控制 非本地 环境中对 Horizon 的访问。 你可以根据需要随意修改此门面,以限制对 Horizon 安装的访问:/** * 注册 Horizon gate 方法 * * gate 决定了谁可以在非本地环境中访问 Horizon。 * * @return void */ protected function gate(){ Gate::define('viewHorizon', function ($user) { return in_array($user->email, [ 'taylor@laravel.com', ]); }); }
运行 Horizon
当在
config/horizon.php
文件中配置好了你的队列执行进程后,你就可以使用horizon
Artisan 命令启动 Horizon。只需要一条命令语句即可启动所有配置好的队列进程:php artisan horizon
你也可以使用
horizon:pause
和horizon:continue
Artisan 命令来暂停或继续执行队列任务:php artisan horizon:pausephp artisan horizon:continue
你可以使用
Anda harus menggunakan Composer untuk memasang Horizon untuk projek Laravel anda:horizon:terminate
php artisan horizon:terminate
Selepas pemasangan selesai, gunakanhorizon:install
untuk mengeluarkan arahan Artisan:[program:horizon] process_name=%(program_name)s command=php /home/forge/app.com/artisan horizon autostart=true autorestart=true user=forge redirect_stderr=true stdout_logfile=/home/forge/app.com/horizon.log
Anda juga harus buat jadualfailed_jobs
, yang Laravel akan gunakan untuk menyimpan sebarang kerja baris gilir yang gagal: 🎜<?php namespace App\Jobs; use App\Video;use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; class RenderVideo implements ShouldQueue{ use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; /** * video 实例 * * @var \App\Video */ public $video; /** * 创建工作实例 * * @param \App\Video $video * @return void */ public function __construct(Video $video) { $this->video = $video; } /** * 执行任务 * * @return void */ public function handle() { // } }
🎜🎜🎜Configuration
🎜Selepas menerbitkan fail berkaitan Horizon, Fail konfigurasi utamanya akan diletakkan dalamconfig/horizon.php
. Anda boleh mengkonfigurasi pilihan berkaitan baris gilir dalam fail ini, dan setiap item konfigurasi mempunyai arahan penggunaan yang terperinci. Sila baca fail ini secara terperinci. 🎜Konfigurasi seimbang
🎜Horizon menyediakan tiga strategi pengimbangan:mudah, auto
danfalse
. Lalai ialahmudah, yang akan mengagihkan tugas yang diterima sama rata kepada proses baris gilir: 🎜 $video = App\Video::find(1); App\Jobs\RenderVideo::dispatch($video);
🎜auto Strategi akan melaraskan tugas proses pekerja setiap baris gilir mengikut arus kuantiti beban kerja. Contohnya: Jika baris gilir pemberitahuan mempunyai 1000 tugasan belum selesai, tetapi baris gilir render
anda kosong, Horizon akan memperuntukkan lebih banyak proses pekerja kepada baris gilirnotifications
sehingga semua tugasan dalam baris gilirnotifications
dilaksanakan. Apabila item konfigurasibaki
dikonfigurasikan kepadafalse
, Horizon akan menggunakan tingkah laku pelaksanaan lalai Laravel, yang akan memproses tugas baris gilir dalam susunan yang disenaraikan dalam konfigurasi. 🎜Pemangkasan Tugas
🎜Fail konfigurasiufuk membolehkan anda mengkonfigurasi tempoh (dalam minit) tugasan baru-baru ini dan yang gagal harus dikekalkan. Secara lalai, tugas terbaharu dikekalkan selama satu jam dan tugasan gagal selama seminggu: 🎜 class RenderVideo implements ShouldQueue{ /** * 获取分配给这个任务的标签 * * @return array */ public function tags() { return ['render', 'video:'.$this->video->id]; } }
🎜🎜🎜Pengesahan kebenaran papan pemuka
🎜Penghalaan papan pemuka Horizon ialah/horizon. Secara lalai, anda hanya boleh mengakses papan pemuka dalam persekitaran local
. Dalam failapp/Providers/HorizonServiceProvider.php
anda, terdapat kaedahgate
. Pemberian ini mengawal akses kepada Horizon dalam persekitaran bukan setempat. Anda bebas mengubah suai fasad ini untuk menyekat akses kepada pemasangan Horizon anda seperti yang diperlukan: 🎜Horizon::routeMailNotificationsTo('example@example.com'); Horizon::routeSlackNotificationsTo('slack-webhook-url', '#channel'); Horizon::routeSmsNotificationsTo('15556667777');
🎜🎜🎜🎜Running Horizon🎜🎜apabila dalamconfig/horizon.php
Setelah proses pelaksanaan baris gilir anda dikonfigurasikan dalam fail, anda boleh memulakan Horizon menggunakan perintahhorizon
Artisan. Hanya satu pernyataan perintah diperlukan untuk memulakan semua proses baris gilir yang dikonfigurasikan: 🎜'waits' => [ 'redis:default' => 60, ],
🎜Anda juga boleh menggunakan perintahhorizon:pause
danhorizon:continue
Artisan untuk menjeda atau meneruskan pelaksanaan Queue tugasan: 🎜/** * 定义应用程序的任务调度 * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule){ $schedule->command('horizon:snapshot')->everyFiveMinutes(); }
🎜Anda boleh menggunakan perintahhorizon:terminate
Artisan untuk menamatkan proses utama Horizon dengan anggun. Horizon akan keluar selepas memproses tugasan yang sedang dilaksanakan: 🎜rrreee🎜🎜🎜🎜Menetapkan Horizon
Jika anda menggunakan Horizon ke pelayan dalam talian, anda perlu mengkonfigurasi pemantau proses untuk mengesan perintah
php artisan horizon
dan mulakan semula secara automatik apabila ia keluar tanpa dijangka. Apabila kod baharu dilancarkan, pemantau proses perlu menamatkan proses Horizon dan mulakan semula Horizon dengan kod yang diubah suai.php artisan horizon
命令,在它意外退出时自动重启。上线新代码时则需要该进程监控器终止 Horizon 进程并以修改后的代码重启 Horizon。Supervisor 配置
如果你使用 Supervisor 进程监控器管理你的
rrreeehorizon
进程,那么以下配置文件则可满足需求:{tip} 如果你不喜欢自己维护服务器,可以考虑使用 Laravel Forge,Forge 提供了运行一个带有 Horizon 的现代、强大的 Laravel 应用所需要的 PHP7+ 及其他所有环境。
标签
Horizon 允许你对任务分配「标签」,包括邮件,事件广播,通知和队列的事件监听器。事实上,Horizon 会智能并且自动根据任务携带 Eloquent 模型给大多数任务标记标签,如下任务示例:
rrreee如果该队列任务是一个携带
rrreeeid
为1
的AppVideo
实例,那么它将自动被标记上AppVideo:1
标签。因为 Horizon 会检查任务属性是否具有 Eloquent 模型,如果发现 Eloquent 模型,Horizon 将会智能的用该模型的类名和主键为任务标记上标签:自定义标签
如果你想手动的为队列执行的对象定义标签,你可以给这个类定义一个
rrreeetags
方法:通知
Note: 在使用通知之前,你应该添加
guzzlehttp/guzzle
Composer 包到你的项目。 在使用 Horizon 配置发送短信通知时,你还应该阅读 Nexmo 通知驱动的依赖条件章节。如果需要在队列等待时间过长时发起通知,可以在应用的
rrreeeAppServiceProvider
中调用Horizon::routeMailNotificationsTo
,Horizon::routeSlackNotificationsTo
, 和Horizon::routeSmsNotificationsTo
方法:配置等待时间过长的阈值
你可以在
rrreeeconfig/horizon.php
配置文件中设置等待时间过长的具体秒数。waits
配置项可以针对每一个 链接 / 队列 配置阈值:Metrics
Horizon 包含一个 Metrics 仪表盘,它可以提供任务和队列等待时间和吞吐量信息,为了填充此仪表盘,你需要配置应用的 scheduler 每五分钟运行一次 Horizon 的
snapshot
Konfigurasi Penyelia
Jika anda menggunakan monitor proses Penyelia untuk mengurus prosesufuk anda, maka fail konfigurasi berikut boleh memenuhi keperluan anda: 🎜rrreee 🎜{tip} Jika anda tidak suka menyelenggara pelayan sendiri, pertimbangkan untuk menggunakan Laravel Forge menyediakan semua yang anda perlukan untuk menjalankan aplikasi Laravel yang moden dan berkuasa dengan Horizon PHP7+ dan semua persekitaran lain. 🎜
🎜🎜tag
🎜Horizon membolehkan anda menetapkan "tag" kepada tugas, termasuk e-mel, siaran acara, pemberitahuan dan pendengar acara baris gilir peranti. Malah, Horizon akan menandai kebanyakan tugas secara bijak dan automatik mengikut model Eloquent yang dibawa oleh tugas itu, seperti dalam contoh tugasan berikut: 🎜rrreee🎜Jika tugas giliran ialah tugas yang membawaid
sebagai1 contoh AppVideo
, kemudian ia akan ditandakan secara automatik dengan tegAppVideo:1
. Kerana Horizon akan menyemak sama ada atribut tugas mempunyai model Eloquent, jika model Eloquent ditemui, Horizon akan menandai tugas dengan bijak dengan nama kelas dan kunci utama model: 🎜rrreeeTeg tersuai
🎜Jika anda mahu Untuk menentukan teg secara manual untuk objek yang dilaksanakan dalam baris gilir, anda boleh mentakrifkan kaedahtag
untuk kelas ini: 🎜rrreee🎜🎜Pemberitahuan
🎜Nota: Sebelum menggunakan pemberitahuan, anda harus menambah pakej Komposer
🎜Jika anda perlu memulakan pemberitahuan apabila masa menunggu giliran terlalu lama, anda boleh memanggilguzzlehttp/guzzle
pada projek anda. Apabila menggunakan konfigurasi Horizon untuk menghantar pemberitahuan SMS, anda juga harus membaca Kebergantungan pemacu pemberitahuan NexmoBab . 🎜Horizon::routeMailNotificationsTo
,Horizon:: dalam
danAppServiceProvider aplikasi
kaedah routeSlackNotificationsToHorizon::routeSmsNotificationsTo
: 🎜rrreeeKonfigurasikan ambang untuk masa menunggu yang berlebihan
🎜Anda boleh melakukan ini dalamconfig /horizon.php
code> Tetapkan bilangan saat tertentu apabila masa menunggu terlalu lama dalam fail konfigurasi. Item konfigurasimenunggu
boleh mengkonfigurasi ambang untuk setiap pautan/baris gilir: 🎜rrreee🎜🎜Metrik
🎜Horizon mengandungi instrumen Metrik Papan pemuka, yang menyediakan masa menunggu tugas dan baris gilir dan maklumat pemprosesan Untuk mengisi papan pemuka ini, anda perlu mengkonfigurasikan penjadual aplikasi untuk menjalankan perintah Artisansnapshot
Horizon setiap lima minit: 🎜rrreeeArtikel ini pertama kali diterbitkan di laman web LearnKu.com.