几种运行模式
queue:work || queue:work --once
默认只执行一次队列请求, 当请求执行完成后就终止;queue:listen
监听队列请求, 只要运行着, 就能一直接受请求, 除非手动终止;queue:work --daemon
同 listen 一样, 只要运行着, 就能一直接受请求, 不一样的地方是在这个运行模式下, 当新的请求到来的时候, 不重新加载整个框架, 而是直接 fire 动作, 当更新代码的时候, 需要停止, 然后重新启动, 这样修改的代码才能起作用
不同点
- Listen 方式使用的是Process实例去循环的执行Work Once, 所以你修改的Job代码会被从新加载,因为Listen的消费是单独开启独立的进程去消费的,当然浪费性能有进程开销
- Work 方式是while(true), 在当前的进程中去处理任务, 修改的代码不会生效
- Work的超时机制,在Laravel<=5.2前Work是不支持超时参数的,在Laravel>=5.3起,Work的daemon模式也开始支持超时机制了,这种机制使用的
时钟 pcntl_alarm
机制,时间到达后出发信号执行kill进程的操作,这种模式开启的要求是version_compare(PHP_VERSION, '7.1.0') >= 0 && extension_loaded('pcntl')
- Listen的超时机制, 只要进程运行着就会自动检测