<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                * * * * * [TOC] ## 介紹 Horizon 提供了一個漂亮的儀表盤,并且可以通過代碼配置你的 Laravel Redis 隊列,同時能夠讓你輕松地監控你的隊列系統中諸如任務吞吐量,運行時間和失敗任務等關鍵指標。 所有配置項都存放在一個簡單的配置文件中,應當把它放進團隊能夠協同維護的版本控制中。 ## 安裝 > {note} 由于 Horizon 中用了異步處理信號,所以安裝擴展包需要 PHP 環境在 7.1 以上。 你應該用 Composer 包管理工具來給你的 Laravel 項目安裝 Horizon。 ~~~ composer require laravel/horizon ~~~ 安裝完成后,使用 Artisan 命令來發布它的相關文件: ~~~ php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider" ~~~ ### 配置 發布 Horizon 的相關文件后,它的主要配置文件會放在?`config/horizon.php`. 你可以在這個文件中配置隊列工作進程相關的選項,并且每個配置項都有詳細的使用說明,所以請詳細的閱讀此文件。 #### 負載均衡配置 Horizon 提供了三種均衡策略:?`simple`,?`auto`, 和?`false`。默認策略是?`simple`,會將接收到的任務均分給隊列進程: ~~~ 'balance' => 'simple', ~~~ `auto`?策略會根據當前的工作量調整每個隊列的工作進程任務數量。例如:如果?`notifications`?隊列有 1000 個待執行任務,但是你的?`render`?隊列是空的,Horizon 會分配更多工作進程給?`notifications`?隊列,直到?`notifications`?隊列中所有任務執行。當配置項?`balance`?設置為?`false`?時,Horizon 會使用 Laravel 默認執行行為,它將按照配置中列出的順序處理隊列任務。 ### 儀表盤權限驗證 Horizon 儀表盤的路由是?`/horizon`。默認情況下,你只能在?`local`?環境中訪問儀表盤。我們可以使用`Horizon::auth`?方法給儀表盤定義更具體的訪問策略。?`auth`?方法接受一個回調函數作為參數,該回調函數應當返回?`true`?或?`false`?以確認用戶是否有權限訪問儀表盤。通常情況下你應當在?`AppServiceProvider`?的?`boot`?方法中調用: ~~~ Horizon::auth(function ($request) { // return true / false; }); ~~~ ## 運行 Horizon 當你在?`config/horizon.php`?文件中配置好了你的隊列執行進程后,你就可以用?`horizon`?Artisan 命令啟動你的 Horizon。只需一條命令語句即可啟動所有配置好的隊列執行進程。 ~~~ php artisan horizon ~~~ 你也可以用?`horizon:pause`?和?`horizon:continue`?Artisan 命令來暫停或繼續執行隊列任務。: ~~~ php artisan horizon:pause php artisan horizon:continue ~~~ 用?`horizon:terminate`?Artisan 命令可以優雅的終止 Horizon 主進程。Horizon 會在把正在執行的所有任務處理完畢后退出: ~~~ php artisan horizon:terminate ~~~ ### 部署 Horizon 如果你將 Horizon 部署到線上服務器時,則需要配置一個進程監控器來監測?`php artisan horizon`?命令,在它意外退出時自動重啟。上線新代碼時則需要該進程監控器終止 Horizon 進程并以修改后的代碼重啟 Horizon。 #### Supervisor 配置 如果你使用 Supervisor 進程監控器管理你的?`horizon`?進程,那么以下配置文件則可以滿足需求。 ~~~ [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 ~~~ > {tip} 如果你不喜歡自己維護服務器,可以考慮使用 Laravel Forge ,Forge 提供了運行一個帶有 Horizon 的現代、強大的 Laravel 應用所需的 PHP7+ 以及其他所有環境。 ## 標簽 你可以在 Horizon 中給任務分配 「標簽」,包括郵件,事件廣播,通知和隊列化的事件監聽器。事實上,Horizon 會智能并且自動根據任務攜帶的 Eloquent 模型給大多數任務標記標簽,如下任務示例: ~~~ <?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; /** * The video instance. * * @var \App\Video */ public $video; /** * Create a new job instance. * * @param \App\Video $video * @return void */ public function __construct(Video $video) { $this->video = $video; } /** * Execute the job. * * @return void */ public function handle() { // } } ~~~ 如果該隊列任務攜帶了一個?`id`?為?`1`?的?`App\Video`?實例,那么它將被標記上?`App\Video:1`?標簽。因為 Horizon 會檢查任務屬性是否有 Eloquent 模型,如果發現 Eloquent 模型,Horizon將會智能的用該模型的類名和主鍵為任務標記上標簽。 ~~~ $video = App\Video::find(1); App\Jobs\RenderVideo::dispatch($video); ~~~ #### 自定義標簽 如果你想手動的為可隊列執行的對象定義標簽,你可以給這個類定義一個?`tags`?方法: ~~~ class RenderVideo implements ShouldQueue { /** * Get the tags that should be assigned to the job. * * @return array */ public function tags() { return ['render', 'video:'.$this->video->id]; } } ~~~ ## 通知 > **Note:**?在使用通知之前,你應該為你的項目添加?`guzzlehttp/guzzle`?Composer 包。在使用 Horizon 配置發送短信通知時,你還需要閱讀?[Nexmo 通知驅動的依賴條件](https://laravel-china.org/docs/laravel/5.5/notifications#sms-notifications)?章節。 如果需要在隊列等待時間過長時發起通知,可以在應用的?`AppServiceProvider`?中調用?`Horizon::routeMailNotificationsTo`,?`Horizon::routeSlackNotificationsTo`,和?`Horizon::routeSmsNotificationsTo`?方法 : ~~~ Horizon::routeMailNotificationsTo('example@example.com'); Horizon::routeSlackNotificationsTo('slack-webhook-url', '#channel'); Horizon::routeSmsNotificationsTo('15556667777'); ~~~ #### 配置等待時間過長通知的閾值 你可以在?`config/horizon.php`?文件中配置等待時間過長具體秒數,?`waits`?配置項可以針對每個 鏈接/隊列 配置閾值: ~~~ 'waits' => [ 'redis:default' => 60, ], ~~~ ## Metrics Horizon 包含一個 metrics 儀表盤,它可以提供任務和隊列等待時間和吞吐量信息,為了填充此儀表盤,需要使用應用的?[scheduler](http://www.hmoore.net/tonyyu/laravel_5_6/786249)?每五分鐘運行一次 Horizon 的 Artisan 命令?`snapshot`: ~~~ /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { $schedule->command('horizon:snapshot')->everyFiveMinutes(); } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看