我正在运行 Laravel 5,并且正在尝试将命令排入队列。我通过运行来启动它:
Queue::push( new MyCommand() );
为了创建 I 命令,我做了:
php artisan make:command --queued MyCommand
MyCommand 包含一个
sleep(20)
和 file_put_contents('test.txt','I work!')
我正在运行的命令行:
beanstalkd -l 127.0.0.1 -p 11301 &
php artisan queue:listen &
并且 config/queue.php 设置为:
'default' => env('QUEUE_DRIVER', 'beanstalkd'),
...
'beanstalkd' => [
'driver' => 'beanstalkd',
'host' => 'localhost:11301',
'queue' => 'default',
'ttr' => 60,
],
当我从浏览器点击代码时,它会挂起 20 秒并在完成之前删除文件,而不是立即返回。
我还需要做些什么才能在后台正确排队命令吗?
最佳答案
确保除了在 QUEUE_DRIVER
文件中设置的 beanstalkd
之外,您没有任何 .env
值。 env()
方法:
'default' => env('QUEUE_DRIVER', 'beanstalkd'),
将首先在当前环境加载的变量中搜索该键,如果没有匹配项,它将回退到作为第二个参数传递的
beanstalkd
值。