您的位置:首页 > 数据库 > Redis

laravel5.1redis队列重复执行问题

2016-05-21 20:36 603 查看
按照官方邮件发送配置完后,将任务添加到队列中,

$job = (new SendReminder($withdrawal))->onQueue('emails')->delay(10);

$this->dispatch($job);

然后服务端启动队列监听,

php artisan queue:listen --queue=emails

却发现任务一直执行,也就是一直会收到邮件。

按理说,生产者将任务加入队列,消费者从队列中取任务消费,应该是先进先出,只执行一次才对呀,可是为什么会一直执行?

安装上redisadmin后查看,发现添加的任务一直保留在队列中,没有被取走(删除)。并且这条任务的状态变为了reserved(保留的)。

然后在网上发现了这篇文章(http://yansu.org/2014/04/11/redis-queue-in-laravel.html),它讲了laravel使用redis作为队列系统的执行流程。

其中讲了什么情况下任务的状态会变为reserved。

像我这种发送通知的任务,正好可以用到。只发送一次(有可能失败,准确性要求不是很高),在handle方法开始加上

$this->job->delete();后,任务就只会最多执行一次了。

最后总结一下怎样才能尽快的发现问题和解决问题:

第一,要从不同的角度(或者眼光)看待同一个问题,就像盲人摸象一样,你可能看到的只是一条腿,只有你接触了耳朵、鼻子...,才能认识真正的问题是什么;这里面是指不要在同一个方向上面纠结,有时候换个角度验证可以更早地发现真正的问题所在;

第二,工具的使用,专业的工具相比(蹩脚的工具),可能会使你发现问题和解决问题的能力提高10倍;在这个问题里面是指redisadmin和redis命令行;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: