Laravel-4:如何使用队列创建守护进程

时间:2013-12-31 11:23:31

标签: php mysql laravel-4 localserver

我需要创建一个Laravel守护程序来从网上获取一些数据并将它们存储在数据库中。我想在Laravel中执行此操作以便使用Eloquent进行查询。我被告知要查看队列,但正如我在文档中看到的那样,如果您首先访问URL,则会调用队列。有没有办法启动队列并让它永远运行?队列是否可以在我的本地环境中工作?到目前为止,我有以下代码:

routes.php文件:

Route::get('daemon', function(){

    Queue::push('SendEmail', []);

});

SendEmail.php

<?php 

class SendEmail {

    public function fire($job, $data)
    {
       dd('ok');
    }

}

但是我得到类SendEmail不存在

3 个答案:

答案 0 :(得分:8)

如果你想每n分钟运行一次任务,你应该在artisan command上运行一个cronjob。这将更好地适合您的用例。

队列有所不同。它们用于在队列列表中堆叠任务。在后台是一个正在运行的监听器,等待新的任务。同时查看docs。您可以在控制台中通过php artisan queue:listen启动监听器。文档建议使用supervisord来管理该任务,尽管没有必要。只要你不终止它,监听器就会运行。

但是,您也可以将artisan命令与队列结合使用。例如。通过cronjob运行命令,生成新的排队任务。队列侦听器稍后将运行这些任务。

另外,请检查this very good answer是否有cronjobs与队列。

答案 1 :(得分:2)

你可能已经保存了Laravel不知道在哪里看的SendEmail类。

如果你正在使用作曲家,那么看看composer.json和自动加载&#39;和&#39; classmap&#39;数组,然后在那里添加您的目录。请记得运行&#39; composer dump-autoload&#39;或者&#39;作曲家更新&#39;。

或尝试将您的目录添加到app / start / global.php ClassLoader函数。这应该有助于找不到的课程。

答案 2 :(得分:1)

如果你想创建一个队列'worker'进程并让它永远运行你应该看一下:http://supervisord.org/ Supervisor将监视你的(worker)进程并在它退出时重启它,失败致命的错误等等。