最近项目需求,研究了laravel的异步队列。官方文档虽然很是详细,但也有些晦涩难懂,在此记录下步骤,供大家参考。

1、修改/config/queue.php文件

<?phpreturn [/*|--------------------------------------------------------------------------| Default Queue Connection Name|--------------------------------------------------------------------------|| Laravel's queue API supports an assortment of back-ends via a single| API, giving you convenient access to each back-end using the same| syntax for every one. Here you may define a default connection.|*/'default' => env('QUEUE_CONNECTION', 'sync'),/*|--------------------------------------------------------------------------| Queue Connections|--------------------------------------------------------------------------|| Here you may configure the connection information for each server that| is used by your application. A default configuration has been added| for each back-end shipped with Laravel. You are free to add more.|| Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"|*/'connections' => ['sync' => ['driver' => 'sync',],'database' => ['driver' => 'database','table' => 'jobs','queue' => 'default','retry_after' => 90,],'beanstalkd' => ['driver' => 'beanstalkd','host' => 'localhost','queue' => 'default','retry_after' => 90,'block_for' => 0,],'sqs' => ['driver' => 'sqs','key' => env('AWS_ACCESS_KEY_ID'),'secret' => env('AWS_SECRET_ACCESS_KEY'),'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),'queue' => env('SQS_QUEUE', 'your-queue-name'),'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),],'redis' => ['driver' => 'redis','connection' => 'default','queue' => env('REDIS_QUEUE', 'default'),'retry_after' => 90,'block_for' => null,],],/*|--------------------------------------------------------------------------| Failed Queue Jobs|--------------------------------------------------------------------------|| These options configure the behavior of failed queue job logging so you| can control which database and table are used to store the jobs that| have failed. You may change them to any database / table you wish.|*/'failed' => ['database' => env('DB_CONNECTION', 'mysql'),'table' => 'failed_jobs',],];

注意:修改.env文件如下参数,设置队列连接默认为数据库连接

QUEUE_CONNECTION=database

2、新建/app/Job/EmailJob.php,此文件为队列主文件

<?php
namespace AppJob;
use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
use IlluminateSupportFacadesLog;
use AppServiceEmailService;
class EmailJob implements ShouldQueue
{use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;private $content,$to;public function __construct($content,$to){$this->content=$content;$this->to=$to;}public function handle(){$res=false;$times=0;while($res!==true && $times<3){try{$times++;$res=EmailService::send($this->content,$this->to);}catch (Exception $e){Log::error(date('Y-m-d h:i:s',time()).' send email error:'.$e->getMessage());}}if($res===true){Log::info(date('Y-m-d h:i:s',time()).' send email success:');}}
}

3、新建/app/Service/EmailJobService.php服务,此文件为封装服务文件,可以不用,直接在使用的地方调用队列。

<?php
namespace AppService;
use AppJobEmailJob;
class EmailJobService
{public static function add($content,$to){$job=new EmailJob($content,$to);dispatch($job);}
}

4、打开终端切换目录进入Laravel项目根目录,执行如下命令,创建队列任务需要的数据表。

php artisan queue:tablephp artisan queue:failed-tablephp artisan migrate

5、通过下面这条指令启动队列监听服务,它会自动处理 jobs 表中的队列任务。

php artisan queue:listen

监听指定队列:

php artisan queue:work --queue=default,mytask --tries=2

这是监听 default和mytask两个队列,区分先后顺序。

6、如果需要在linux中后台运行,有两种方法:

6.1 执行如下命令:

nohup php artisan queue:listen > /tmp/artisan.log 2>&1 &

6.2.1 安装Supervisor,我的服务器系统为CentOs7.5,所以使用yum安装。

yum install supervisor

6.2.2 在/etc/supervisord.d下新建ini文件,eg:laraver-worker.ini,设置自动运行命令等相关参数

[program:laravel-worker]process_name=%(program_name)s_%(process_num)02dcommand=php 这里需要写项目目录/artisan queue:work --sleep=3 --tries=3autostart=trueautorestart=trueuser=rootnumprocs=8stdout_logfile=/root/queue/daily_english_queue.log

6.2.3 启动supervisor,laravel队列监听进程便在后台运行了。

supervisord -c /etc/supervisord.conf

7、注意:如果修改了job内的代码(包括job调用的方法类),是需要重启queue的。

php artisan queue:restart

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要

PHP进阶架构师>>>视频、面试文档免费获取​shimo.im

或 者关注咱们下面的知乎专栏

PHP架构师圈子​zhuanlan.zhihu.com

apache2.4打开laravel项目_Laravel异步队列全攻略相关推荐

  1. 苹果系统方舟怎么开服务器,方舟生存进化手游苹果版上帝模式怎么打开 | 手游网游页游攻略大全...

    发布时间:2016-08-22 新出了大逃杀模式,玩家要在这个弱肉强食的世界争分夺秒的获取资源与生存,小编这里为大家带来了"峻晨热游"分享的大逃杀模式试玩视频,一起来看吧. 更 . ...

  2. 【信息系统项目管理师】论多项目的资源管理(论文攻略篇)

    [信息系统项目管理师]论多项目的资源管理(论文攻略篇) 论多项目的资源管理(论文攻略篇) [信息系统项目管理师]论多项目的资源管理(论文攻略篇) 历年论文考试论题分析 分论题概述 心得 不足之处 1. ...

  3. 本地服务器打开laravel项目报错的解决方法

    部分初学者安装完laravel项目,在本地服务器想打开项目首页时会发现这样的问题: Warning:require(C:\phpStudy\PHPTutorial\WWW\test\BSbacksta ...

  4. springboot+vue项目之MOBA类游戏攻略分享平台(java项目源码+文档)

    风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农.今天要和大家聊的是一款基于springboot的MOBA类游戏攻略分享平台.项目源码以及部署相关请联系风歌,文末附上联系信息 .

  5. 嵌入式小白到大神学习全攻略(学习路线+课程+学习书籍+练习项目)

    文章较长,希望耐心阅读,读完相信会对你的学习一定有帮助~ 嵌入式工程师需要掌握的内容非常广泛,嵌入式可以说是当下最有前途的IT应用领域,小到电子词典.手机,大到航空航天设备都是典型的嵌入式系统,因此, ...

  6. python飞机大战程序导入_Python飞机大战项目的准备 导入Pygame最全攻略~

    1.导入pygame 首先是导入pygame模块,下面介绍的是pycharm中导入 先建立一个项目 左上角File->Setting->project:飞机大战项目(你自己的文件名字)-& ...

  7. 闲鱼卖货项目教程,新手小白3天上手最全攻略!

    废话不说,直接上干货,今日的内容是闲鱼的进阶版本,至于闲鱼根底的知识,请参阅往期的干货,其实玩转闲鱼的核心有2个,一是选品,二是搞定流量:因此今日的内容就围绕这2个核心为你解说! 一.怎样选品 一.选 ...

  8. kong组件_使用Kongzue全家桶组件创建项目全攻略(一、引入和沉浸式的那些事儿)...

    [更新于 2018.12.18] 前言 本文主要介绍如何使用在Github开源的Kongzue全家桶组件快速创建新项目,以及处理响应式.权限等操作的方法. 本文中演示的步骤成品将会在最终开源至Gith ...

  9. word文档可以打开但显示乱码的完全解决攻略

    一.文档格式法解决word文档乱码故障 这种方法是将损坏的Word文档转换为另一种格式,然后再将其转换回Word文档格式.注:这是最简单和最彻底的文档恢复方法. 1.在Word中打开损坏的文档后,选择 ...

最新文章

  1. 内核中的HZ 及延迟等
  2. java读取csv文件
  3. 主页面功能的java_6-04-项目实战-主页面显示当前用户退出功能实现
  4. 实现较低的计时器粒度以重传TCP(RTO):时间轮算法如何减少开销
  5. java多线程(二)——锁机制synchronized(同步方法)
  6. STS下载教程(include官网无法下载解决方案)
  7. 西北农林科技大学CSDN高校俱乐部运营策划书
  8. cgi-bin是什么
  9. 如何观察一棵树 - 笔记
  10. uploader什么意思_webuploader
  11. PHPEMS +XAMPP 验证码显示不出来解决方法
  12. 美国国土安全部2.5万雇员隐私信息遭黑客窃取
  13. [ext4]空间管理 - 分配机制
  14. iOS 自动订阅开发
  15. matlab电机算法仿真,MATLAB电机仿真精华50例源代码
  16. Flutter 画面渲染的全面解析
  17. mysql修改初始化得到的密码
  18. 关于Direct3D11中字体的思考
  19. 利用Windows Azure Queue Storage给AutoCAD传递对象
  20. 等不及了,连成人都想抢看的动画片

热门文章

  1. 德国精品软件推荐   压缩软件 WINRAR 个人版终于免费了。
  2. Go http访问使用代理
  3. DDNS-动态域名解析服务
  4. VS2005+SQL2005 Reporting Service动态绑定报表(Web)
  5. Leetcode 1015. Smallest Integer Divisible by K
  6. 人物和背景分离的快速方法
  7. ACM-ICPC 2018 南京赛区网络预赛 Lpl and Energy-saving Lamps 线段树
  8. Burst Balloons
  9. javaScript书写规范
  10. Android使用SeekBar