【发布时间】:2015-07-28 11:34:26
【问题描述】:
我们目前在 Laravel 中使用队列工作者处理一组任务。当我使用php artisan queue:work 的多个线程时,作业最终会一起运行(异步)。我们使用 Beanstalkd 作为队列驱动程序。
问题在于,在队列工作中,我们正在轮询一个 API,该 API 只允许一个特定 agent_id 的并发会话。也就是说,一次只能运行一个具有相同 agent_id 的 API 调用。
我们曾想过使用与agent_id 匹配的queue_name 上的过滤器启动多个php artisan queue:work 线程,但我们有超过500 个代理,因此我们需要500 个线程,所以这并不理想。
是否可以为每个agent_id 实现锁定样式功能,以便如果某个特定agent_id 的作业已经在运行,它将把它发送回队列?还是 beanstalkd 的任何功能允许这样做?
另一个选项也可以是在用户已经登录时优雅地处理来自 API 的拒绝(并将作业发送回队列)。但这可能会变得混乱,并且可能会使日志混乱。
【问题讨论】:
标签: multithreading laravel beanstalkd