使用主管的Laravel 5.8异步队列问题

时间:2019-06-10 21:51:27

标签: laravel laravel-5 supervisor laravel-5.8 laravel-queue

我在应用程序中使用Laravel队列,我有以下配置,

.env

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=database
SESSION_DRIVER=file

config / queue.config

'default' => env('QUEUE_CONNECTION', 'sync'),


'connections' => [

    'sync' => [
        'driver' => 'sync',
    ],

    'database' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'default',
        'retry_after' => 90,
    ]
]

我已设置supervisor,并且具有以下配置

/etc/supervisor/conf.d/laravel_queue.sh

[program:laravel_queue]
process_name=%(program_name)s_%(process_num)02d
command=php /usr/local/bin/run_queue.sh
startsecs = 0
autostart=true
autorestart=true
user=root
redirect_stderr=true
stderr_logfile=/var/log/laraqueue.err.log
stdout_logfile=/var/log/laraqueue.out.log

/usr/local/bin/run_queue.sh

php /var/www/myproject/artisan queue:work --tries=1

问题:

当我设置QUEUE_CONNECTION=sync时,它可以正常工作,但是作业是同步执行的。我希望它们异步执行。因此,当我设置QUEUE_CONNECTION=database时,我的作业根本不会执行,并且可以看到它们位于我的jobs表中。

我还观察到,当我直接从项目目录运行php artisan queue:work时,它可以按预期工作,也就是说,作业是异步执行的。

在这方面的任何帮助都将受到赞赏。

2 个答案:

答案 0 :(得分:1)

我不确定Laravel 5.8,但是我为Laravel 5.3设置了以下内容

// Define the queue driver
php /var/www/myproject/artisan queue:work database --tries=1

,并在监管配置文件中定义numprocs=1

答案 1 :(得分:1)

来自Queue section of the Laravel docs (5.4)

  

配置主管

     

Supervisor配置文件通常存储在   /etc/supervisor/conf.d目录。在此目录中,您可以   创建任意数量的配置文件以指导主管   您的过程应受到监控。例如,让我们创建一个   laravel-worker.conf文件可以启动并监视queue:work   过程:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3
autostart=true
autorestart=true
user=forge
numprocs=8
redirect_stderr=true
stdout_logfile=/home/forge/app.com/worker.log
     

在此示例中,numprocs指令将指示Supervisor   运行8个queue:work进程并自动监视所有进程   如果它们失败,请重新启动它们。当然,您应该更改   queue:work sqs指令中的command部分可以反映您的   所需的队列连接。

     

启动主管

     

创建配置文件后,您可以更新   使用以下内容配置主管并启动流程   命令:

sudo supervisorctl reread

sudo supervisorctl update

sudo supervisorctl start laravel-worker:*
     

有关主管的更多信息,请咨询主管   documentation

有关此命令(source)的简要说明:

  
      
  • 重新读取-重新读取主管配置。不要更新或重新启动正在运行的服务。
  •   
  • 更新-重新启动配置已更改的服务。通常在“重读”之后运行。
  •   
  • 重新加载-重新读取超级用户配置,重新加载超级用户和超级用户,重新启动已启动的服务。
  •   
  • 重新启动-重新启动服务
  •   

此外,this article可以解决您的问题。希望这会有所帮助。