laravel job(初体验)

laravel job(初体验)

    本菜也是第一次实践laravel的job,讲真踩坑无数(QAQ),我做的是通过一个event监听状态根据监听的状态运行对应的job。
其实个人总结的话写一个简易的job其实很容易,首先创建一个job就生成在你的job目录下,之后在你的job里写你的逻辑。在另在一层(如C层)用laravel自带函数dispatch来调用job,我写的是延时队列,其实也简单只需要加一个函数就ok

// 里面是以秒为单位
$job->delay();
创建job

php artisan make:job name

    有一点很重要在你更改job的代码之后,需要重启不然还是读取你以前的代码(不过我自己有时候不去restart也没事= =,反正规范吧)。

更改代码重启

php artisan queue:restart

    那么讲下守护进程,了解workman的都知道,开启进程是php xxx.php start (调试模式),但是切出的时候进程自己就断开了,为了能一直在服务器里运行所以我们要php xxx.php start -d开始守护进程模式,你不stop或者kill这个进程,它就会一直运行下去。job也同理,本菜最开始以为我在本地是一直运行一次结束一次,在手动运行到了线上就不能这样啊,我的想法是写一个定时任务每一秒就去执行我的queue:work这个命令,其实用守护进程的方法就可以一直运行啦~,记得监听队列

一次性启动队列

php artisan queue:work

守护进程模式(类似workman的-d)

php artisan queue:work --daemon

队列监听

php artisan queue:listen

    最后讲一下我所遇到的坑,我所认知的是在你调用job里的时候,你的redis会存储一个有序集合,等到job运行完毕会删除掉这个有序集合。哎我尼玛最开始不知道啊,我一直是直接启动队列的方式来调试的我的代码,终于有一次我在运行启动命令的时候没有反应了我:?????,其实是因为我redis key里那条有序集合被删掉了,所以没有数据的时候就什么干不了。我疯狂百度啊就是找不到问题所在,最后才找到问题关键点,打开redis KEYS * 里有一条,执行成功就被删除,一定要往redis里存数据啊!!!!就好比job是一个水池你不注入水怎么能出水呢?所以我调试的方式是错误的,就应该开始守护进程模式,然后在你的c层直接调用你dispatch的那个方法就OK了。
    我还有一个疑问一直没有证实。就是怎么能运行我指定的job,我找了一篇文章说在job里添加$queue='xxxx’就好比你给你的脚本定义名字再去运行一样,不过我也不知道这个说法是不是对的hhh
    这个东西你不试真不知道,所以感兴趣的盆友可以动手试验一下,以上是我自己的认知,如果有错误麻烦各位大佬指出来一下。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值