6

我正在使用 Laravel 5.1,我有一个大约需要 2 分钟来处理的任务,这个任务特别是生成报告......

现在,很明显,我不能让用户在我接受用户输入的同一页面上等待 2 分钟,而是我应该在后台处理此任务并稍后通知用户任务完成......

因此,为了实现这一点,Laravel 提供Queues了在后台运行任务(如果我没理解错的话),现在对于多用户环境,即如果多个用户需要生成报告(比如有 4 个用户),那么命名的特性Queues,是不是意味着任务会一个接一个地执行(即当4个用户一个接一个地要求生成报告时,那么只有在生成第3个用户的报告时才会生成第4个用户的报告)??

如果Queues一个接一个地完成他们的任务,那么无论如何,哪些任务会根据用户的要求在后台立即处理,并且用户可以在其任务完成后得到通知?

4

2 回答 2

0

基于队列的架构比这复杂一点。请参阅 Queue 为您提供了不同消息实现的接口,如rabbitMQ、beantalkd。
现在,在代码中的任何位置,您都将发送消息发送到队列,在此上下文中称为 JOB。现在您的队列将有多个作业准备好按照 FIFO 顺序退出。

根据您的问题,有工作人员在听队列,他们找到工作并执行它们。需要多少工人取决于您。如果您有一个工人,您的任务将一个接一个地执行,更多的工人更多的并行进程。

工作进程使用 laravel 的命令行界面启动,称为 Artisan。每个进程意味着一个工人。您可以使用主管启动多个工作人员。

于 2016-09-12T11:47:56.180 回答
0

由于您确定您将在大约 2 分钟后向用户发送通知,因此我建议使用 cron 作业检查是否每 2 分钟生成任何报告,如果有,您可以向用户发送通知。该检查将是一个简单的查询,因此无需过多担心性能。

于 2016-09-13T07:37:57.767 回答