【问题标题】:Running artisan queue:work with additional arguments运行工匠队列:使用附加参数
【发布时间】: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


【解决方案1】:

这个问题可以通过使用专用队列来解决。所以每个队列都有一个特定的代理进程附加到它上面。唯一剩下的就是创建一个函数/进程来确定进程应该进入哪个队列。

https://laravel.com/docs/5.1/queues#pushing-jobs-onto-the-queue

查看部分:为作业指定队列

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-22
    • 2014-11-10
    • 2018-07-25
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    相关资源
    最近更新 更多