laravel队列

WBOY
풀어 주다: 2016-06-20 12:33:18
원래의
1594명이 탐색했습니다.

遇到的坑罗列如下:

1、加入队列的程序如何写

这个很多教程都没说明白,其实很简单,就像我们调用类一样,如果有参数,他会一起放到payload字段中去,等待队列去执行,例如:

方式1:用Bus:dispatch

use Illuminate\Support\Facades\Bus;
로그인 후 복사

Bus::dispatch(new \App\Jobs\sendMsg($arr));
로그인 후 복사

方式2:用Queue::push

use Queue;
로그인 후 복사

Queue::push(new \App\Jobs\sendMsg($arr))
로그인 후 복사

至于$arr是啥,就是传入执行任务的数组了。

2、为啥程序立马执行了

大多数教程都说我们修改config/queue.php中的

'default' => env('QUEUE_DRIVER', 'database'),
로그인 후 복사

但是其实还与我们环境有关,万一我们的.env设置的QUEUE_DRIVER是sync肯定就同步执行了,于是我们还需要看看.env的设置,进行到这一步,理论上你可以在queue数据表中看到如下的记录了,也就说说没执行一次push,会往生产中加入一条记录:

{"job":"Illuminate\\Queue\\CallQueuedHandler@call","data":{"command":"O:16:\"App\\Jobs\\sendMsg\":7:{s:22:\"\u0000App\\Jobs\\sendMsg\u0000toid\";s:11:\"13080603915\";s:28:\"\u0000App\\Jobs\\sendMsg\u0000templateid\";s:11:\"SMS_5905289\";s:22:\"\u0000App\\Jobs\\sendMsg\u0000data\";a:3:{s:4:\"code\";i:12544;s:7:\"product\";s:15:\"\u53cc\u521b\u6559\u80b2222\";s:4:\"item\";s:4:\"4545\";}s:10:\"connection\";N;s:5:\"queue\";N;s:5:\"delay\";N;s:6:\"\u0000*\u0000job\";N;}"}}
로그인 후 복사

看到没,参数都带上了吧!

3、如何生成queues跟failed_queues表

php artisan queue:table

php artisan queue:failed-table

执行这两个命令就可以了

4、如何添加队列任务

说的蛮高大上,几乎听不懂,其实也就是添加一个类,通过这个类的handle来执行某些任务,但是这个handle会自动去执行,我们只需要把逻辑写到handle方法体里面就行了。

如下代码会报错,因为command不存在

php artisan make:command SendEmail --queued
로그인 후 복사

正确的方式:

php artisan make:job SendEmail
로그인 후 복사

这样我们就可以看到在App/Jobs生成了SendEmail.php类文件,我们在需要将某东西加入类的时候只用执行:

Queue:push(new \App\Jobs\SendEmail(参数));就可以了。就这么简单。

5、如何监听队列

在windows机子上,我们执行php artisan queue:listen会去监听并去执行队列,如果我们将队列人物保存在数据库中,则会去读queue数据表,如果不执行这个命令,queue表中的记录不会少,执行完之后queue表中的记录就删了。关于记录执行情况问题,这里我们还是放到logs里面去吧!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!