队列日记

2018-06-29  本文已影响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 重新加载代码。

上一篇下一篇

猜你喜欢

热点阅读