第一步:.env文件中设置队列驱动为database,默认sync是直接执行,并不是异步队列。
QUEUE_DRIVER=database
第二步:创建保存队列的表jobs
PHP artisan queue:table //生成数据库队列的(laravel 5.2和5.4字段有差异) PHP artisan queue:Failed-table //处理失败的队列 migrationPHP artisan migrate //创建该数据库队列表
第三步:运行Artisan命令,生成任务类,/app/Jobs/SendReminderEmail.PHP
PHP artisan make:job SendReminderEmail
类代码如下:
<?PHP namespace App\Jobs; use App\User; use App\Jobs\Job; use Illuminate\Support\Facades\Log; use Illuminate\Contracts\Mail\Mailer; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Bus\SelfHandling; use Illuminate\Contracts\Queue\ShouldQueue; class SendReminderEmail extends Job implements ShouldQueue, SelfHandling { use InteractsWithQueue, SerializesModels; protected $data; /** * 创建一个新的任务实例 * * @param User $user * @return void */ public function __construct($data) { $this->data = $data; } /** * 执行任务 * * @param Mailer $mailer * @return void */ public function handle() { //Log::info($this->data); Log::info('往日志文件里写信息!'); } /** * The job Failed to process. * * @param Exception $exception * @return void */ public function Failed(Exception $exception) { // Send user notification of failure, etc... } }
第四步:创建控制器,加入队列。/app/Http/Controllers/UserController.PHP
<?PHP namespace App\Http\Controllers; use App\User; use Carbon\Carbon; use Illuminate\Http\Request; use App\Jobs\SendReminderEmail; use Illuminate\Support\Facades\Log; use App\Http\Controllers\Controller; class UserController extends Controller{ public function index(){ Log::info('This is a log demo!'); } /** * 发送提醒邮件到指定用户 * * @param Request $request * @param int $id * @return Response */ public function sendReminderEmail($id) { $user = User::findOrFail($id); $job = (new SendReminderEmail($user)) ->delay(Carbon::Now()->addMinutes(1)); $this->dispatch($job); } }
如果成功会在jobs表有条队列数据。queue默认default,可以调用onQueue('队列名'),指定队列名称。
laravel 5.2的表,5.4里去除了reserved字段。
第五步:启用任务队列
PHP artisan queue:listen
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。