美文网首页
队列日记

队列日记

作者: 土豆丝呢 | 来源:发表于2018-06-29 22:27 被阅读0次

    消息队列的主要特点是异步处理,主要目的是减少请求响应时间和解耦。所以主要的使用场景就是将比较耗时而且不需要即时(同步)返回结果的操作作为消息放入消息队列。同时由于使用了消息队列,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响,即解耦和。

    解耦:生成 Slug 只是一个优化功能(不需要即时返回结果),并非是发帖的必要功能(需要即时返回结果),我们希望无论生成 Slug 的结果如何,用户都能顺利的发帖,并且完全察觉不到延迟。

    减少请求响应时间:利用队列系统可以做到这点。队列允许你异步执行消耗时间的任务,比如请求百度翻译API。这样可以有效的降低请求响应的时间。


     composer require "predis/predis:~1.0"

    QUEUE_DRIVER=redis(修改env,默认SYNC)

    php artisan queue:failed-table(生成任务失败的迁移表)

    $ php artisan migrate(执行迁移)

    php artisan make:job namejob(生成任务队列类,app/Jobs,注入模型,要执行的方法)

    利用模型监控实现任务分发dispatch(new namejob($topic));

    任务队列监控:

    composer require "laravel/horizon:~1.0"

    php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"

    开启监控php artisan horizon

    线上部署须知

    在开发环境中,我们为了测试方便,直接在命令行里调用 artisan horizon 进行队列监控。然而在生产环境中,我们需要配置一个进程管理工具来监控 artisan horizon 命令的执行,以便在其意外退出时自动重启。当服务器部署新代码时,需要终止当前 Horizon 主进程,然后通过进程管理工具来重启,从而使用最新的代码。

    1,简而言之,生产环境下使用队列需要注意以下两个问题:

    2,使用 Supervisor 进程工具进行管理,配置和使用请参照 文档 进行配置;

    每一次部署代码时,需 artisan horizon:terminate 然后再 artisan horizon 重新加载代码。

    相关文章

      网友评论

          本文标题:队列日记

          本文链接:https://www.haomeiwen.com/subject/csszyftx.html