这里写问题描述
同步队列为社么不等待Redis::send($queue, $data, 60); 执行完再显示redis queue test,而是立即显示redis queue test
控制器和队列分别属于不同的进程;
你的理解有误.文档中没有"同步队列"这个概念,我觉得你搞混了"任务投递"和"任务执行".
队列任务投递方式有两种,异步投递,和同步投递
//异步投递 Client::send($queue, $data, 60); //同步投递 Redis::send($queue, $data, 60);
同步投递有返回值,直接将任务放进队列,能明确的知道任务是否成功放入了队列 异步投递是先把任务放进内存,在异步的将消息放进队列,这就导致如果进程内存中的消息积压的情况下重启了,数据就丢了.
"队列"这个词已经明确的表示了任务是异步执行的.
举个例子:"邮件发送队列",由两部分代码共同完成,
第一部分代码只负责将邮件交给邮差(任务投递)(你截图中划红线的部分), 第二部分代码是邮差按照你投递的规则将邮件发给收件人(任务消费)
我们不妨改改你的问题"同步投递为什么不等待Redis::send($queue, $data, 60)阻塞执行完"
答:事实上Redis::send($queue, $data, 60);已经执行成功了,他完成了上述第一部分(投递)的任务,正确的把任务写入了队列
说的对,生产生产,消费是消费,任务同步投递生产已经执行完了
控制器和队列分别属于不同的进程;
你的理解有误.文档中没有"同步队列"这个概念,我觉得你搞混了"任务投递"和"任务执行".
队列任务投递方式有两种,异步投递,和同步投递
同步投递有返回值,直接将任务放进队列,能明确的知道任务是否成功放入了队列
异步投递是先把任务放进内存,在异步的将消息放进队列,这就导致如果进程内存中的消息积压的情况下重启了,数据就丢了.
"队列"这个词已经明确的表示了任务是异步执行的.
举个例子:"邮件发送队列",由两部分代码共同完成,
第一部分代码只负责将邮件交给邮差(任务投递)(你截图中划红线的部分),
第二部分代码是邮差按照你投递的规则将邮件发给收件人(任务消费)
我们不妨改改你的问题"同步投递为什么不等待Redis::send($queue, $data, 60)阻塞执行完"
答:事实上Redis::send($queue, $data, 60);已经执行成功了,他完成了上述第一部分(投递)的任务,正确的把任务写入了队列
说的对,生产生产,消费是消费,任务同步投递生产已经执行完了