我正在一个laravel项目中工作,该项目涉及应用程序的客户,以通过各种其他API将数据导入到应用程序中。
我正在考虑为每种需要导入的数据制作作业。但是,这意味着许多客户将要筹集需要队列工作人员处理的工作,这意味着,如果一个客户提出一项要导入一个正在导入某种数据的工作的工作,而另一个客户也提出了一项工作,则该工作将被导入。要导入相同类型的数据,他将必须等待第一个客户的工作完成,然后才能通过队列工作来开始第二个客户的工作。但是,那时我们不能有100个客户互相等待。
那么,这种进口的可行解决方案是什么?我是否应该将作业放在哈希队列中,然后再调用这些队列?还是有更好的方法来处理此问题。有没有人曾经使用过这样的应用程序,即客户从各种API异步导入了数据。以及如何最好地处理它。
最佳答案
您指向正确的方向。您需要一个诸如Laravel的队列工作器-但您需要选择异步驱动程序。您可以使用内置驱动程序,也可以尝试安装自己的队列服务器,例如RabbitMQ。这是一个用于Laravel 5的RabbitMQ驱动程序的不错的软件包:
https://github.com/vladimir-yuldashev/laravel-queue-rabbitmq
这将使您所有的客户请求都将进入每个单独线程的异步队列。这些队列系统工作非常高效,我们可以说这是一种异步PHP。为了使PHP代码更加异步,您可以使用Guzzle HTTP包,该包提供Async Request(以及来自应用程序的PHP代码/服务器端的完整服务)。
关于multithreading - 如何处理laravel作业的多个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39505327/