zoukankan      html  css  js  c++  java
  • laravel中Horizon简单介绍适合于redis操作队列

    简单介绍

    horizon为您的laravel驱动的redis队列提供了漂亮的仪表板和代码驱动配置。Horizon允许您轻松监视队列系统的关键度量,如作业吞吐量、运行时和作业失败。

    您的所有工作机配置都存储在一个简单的配置文件中,允许您的配置保留在源代码管理中,以便整个团队可以进行协作。

    注意:由于它使用异步进程信号,horizon需要php 7.1+

    您可以使用composer将horizon安装到您的laravel项目中:

    composer require laravel/horizon

    安装Horizon后,使用“供应商:发布Artisan”命令发布其资源:

    php artisan vendor:publish --provider="LaravelHorizonHorizonServiceProvider"

    配置

    发布horizon的资产后,它的主配置文件将位于config/horizon.php。此配置文件允许您配置工作机选项,并且每个配置选项都包含其用途的描述,因此请确保彻底浏览此文件。

    平衡期权

    Horizon允许您从三种平衡策略中进行选择:简单(simple)、自动(auto)和错误false)。默认情况下,简单策略在进程之间均匀地分割传入的作业:

    'balance' => 'simple',
    自动策略根据队列的当前工作负载调整每个队列的工作进程数。例如,当呈现队列为空时,如果通知队列有1000个等待作业,Horizon将向通知队列分配更多的作业,直到它为空。当balance选项设置为false时,将使用默认的laravel行为,该行为按照队列在配置中列出的顺序处理队列。
    horizon在/horizon处显示仪表板。默认情况下,您只能在本地环境中访问此仪表板。要为仪表板定义更具体的访问策略,应该使用horizon::auth方法接受应返回true或false的回调,指示用户是否应访问Horizon仪表板:

    Horizon::auth(function ($request) {
        // return true / false;
    });

    运行范围

    一旦您在config/horizon.php配置文件中配置了您的工作人员,就可以使用horizon artisan命令启动horizon。这个命令将启动所有配置的工作线程:

    php artisan horizon
    可以暂停地平线进程,并指示它使用地平线:暂停和地平线:继续Artisan命令继续处理作业:

    php artisan horizon:pause php artisan horizon:continue

    您可以使用horizon:terminate artisan命令优雅地终止计算机上的主地平线进程。地平线当前正在处理的任何作业都将完成,然后地平线将退出:

    php artisan horizon:terminate

    部署地平线

    如果要将horizon部署到活动服务器,则应配置一个进程监视器来监视php artisan horizon命令,并在该命令意外退出时重新启动它。将新代码部署到服务器时,需要指示主地平线进程终止,以便进程监视器可以重新启动它并接收代码更改。

    您可以使用horizon:terminate artisan命令优雅地终止计算机上的主地平线进程。地平线当前正在处理的任何作业都将完成,然后地平线将退出:

    php artisan horizon:terminate

    PHP Artisan 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


    如果您不喜欢管理自己的服务器,请考虑使用laravel forge。forge为php 7+服务器提供运行horizon的现代、健壮的laravel应用程序所需的一切。

     
    <?php
    
    namespace AppJobs;
    
    use AppVideo;
    use IlluminateBusQueueable;
    use IlluminateQueueSerializesModels;
    use IlluminateQueueInteractsWithQueue;
    use IlluminateContractsQueueShouldQueue;
    use IlluminateFoundationBusDispatchable;
    
    class RenderVideo implements ShouldQueue
    {
        use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    
        /**
         * The video instance.
         *
         * @var AppVideo
         */
        public $video;
    
        /**
         * Create a new job instance.
         *
         * @param  AppVideo  $video
         * @return void
         */
        public function __construct(Video $video)
        {
            $this->video = $video;
        }
    
        /**
         * Execute the job.
         *
         * @return void
         */
        public function handle()
        {
            //
        }
    }



    如果此作业与ID为1的appvideo实例一起排队,则它将自动接收标记appvideo:1。这是因为horizon将检查任何雄辩模型的作业属性。如果找到有说服力的模型,Horizon将使用模型的类名和主键智能地标记作业:

    $video = AppVideo::find(1);
    
    AppJobsRenderVideo::dispatch($video);

     

    手动标记

    如果要手动定义某个可排队对象的标记,可以在类上定义标记方法:

    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];
        }
    }

    通知

    注意:在使用通知之前,应该将guzzlehttp/guzzle composer包添加到项目中。在配置horizon发送sms通知时,还应该检查nexmo通知驱动程序的先决条件。

    如果您希望在某个队列等待时间过长时收到通知,可以使用horizon::routemailnotificationsto、horizon::routeslacknotificationsto和horizon::routesnotificationsto方法。您可以从应用程序的AppServiceProvider调用以下方法:

    Horizon::routeMailNotificationsTo('example@example.com');
    Horizon::routeSlackNotificationsTo('slack-webhook-url', '#channel');
    Horizon::routeSmsNotificationsTo('15556667777');

    配置通知等待时间阈值

    您可以在config/horizon.php配置文件中配置被视为“长等待”的秒数。此文件中的waits配置选项允许您控制每个连接/队列组合的长等待阈值

    'waits' => [
        'redis:default' => 60,
    ],

    Horizon包括一个Metrics仪表板,它提供关于您的作业和队列等待时间以及吞吐量的信息。为了填充此仪表板,应配置Horizon的快照Artisan命令,使其每五分钟通过应用程序的计划程序运行一次:

    /**
     * Define the application's command schedule.
     *
     * @param  IlluminateConsoleSchedulingSchedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('horizon:snapshot')->everyFiveMinutes();
    }
     
  • 相关阅读:
    设计模式之策略设计模式
    我的Java编码规范
    Jvm中的垃圾回收
    Jvm运行时内存解析
    SSH框架的搭建
    xshell5运行hadoop集群
    安装虚拟机和网络配置
    大数据技术原理与运用知识
    Redis高级应用解析:缓存穿透、击穿、雪崩
    B+Tree原理及mysql的索引分析
  • 原文地址:https://www.cnblogs.com/zhanghuilong/p/11730473.html
Copyright © 2011-2022 走看看