【发布时间】:2016-05-23 23:01:17
【问题描述】:
我正在尝试运行排队的作业,并通过命令行传递其他参数。我的用例是这样的:
我有 4 个通过主管运行 queue:work 进程。我队列中的作业都需要访问代理服务器,通过它我在任何给定时间只能运行 4 个进程。当我启动一个排队的作业时,我必须找到一个当前未使用的进程号(1 到 4),然后通过该进程运行我的命令。
我一直在使用数据库表来存储进程,它有一个 in_use 列,用于跟踪它是否被使用,但我看到的问题是当两个 queue:work 命令同时运行时,可以从数据库中为两者选择相同的代理进程。
我想要什么
php artisan queue:work --process=1
然后以某种方式在作业中检索该参数,以便我可以分别在主管中运行我的 4 个进程。
作为一种解决方法,我创建了一个自定义工匠命令,该命令将接受参数,但随后我失去了队列功能。我不想开发自定义队列流程。
有没有办法传递这个参数?或者,有没有一种方法可以从我的自定义工匠命令中将作业从队列中弹出,然后手动运行它们而不是通过queue:work?
【问题讨论】:
-
为什么不为这些进程创建专用队列?然后你可以指定你的任务应该被推送到哪个队列,这样它就会自动使用你想要的代理连接? laravel.com/docs/5.1/queues#pushing-jobs-onto-the-queue 参见为作业指定队列部分
-
这可能是我最终要做的事情......但是,您将如何从工作中获取进程 ID?我想当我尝试创建作业时,我可以查询
jobs表以了解每个进程中有多少作业排队,然后将作业推送到最小的队列中,并将相同的进程 ID 传递给作业构造函数? -
我很难告诉你怎么做,因为我不知道你的代码结构。我希望你能找到一种方法让它对你有用!
-
@ThomasSnijder 我确实是这样做的,欢迎您发表我可以接受的答案
标签: laravel laravel-5.1 supervisord laravel-artisan