【问题标题】:Laravel 6 | Configurable Jobs, attaching a model to a jobLaravel 6 |可配置的作业,将模型附加到作业
【发布时间】:2020-04-12 02:20:34
【问题描述】:

问题

所以我基本上希望能够拥有附加到用户的作业,并且用户能够调整有关作业的信息(预定时间、名称、描述等)。

我的想法

我曾考虑让一个主作业运行在一个作业表中,该表具有它们应该运行的时间和所有信息,但这似乎是一种非常笨拙的方法。我想知道是否有更好的选择,我知道他们已经有工作监控包,但似乎没有一个是为了向客户展示而设计的,而是为了向开发人员展示更多的设计。

问题

那么,是否有某种方式可以让用户附加到某些作业,同时还能够配置它运行的日期/时间?我想尝试获取的格式如下所示。

[
    "id" => 1,
    "name" => "Test Job",
    "description" => "This is a test job.",
    "instigator_id" => 58,
    "time_scheduled" => "INSERT CARBON DATE HERE",
    "internal" => false,
    "date_created" => "",
    "last_updated" => ""
]

【问题讨论】:

  • 是的,您可以在生成用户模型时将其调整为作业。然而,一旦它被安排了,你调整一个预定的时间或一个名字就很奇怪了。在我看来,您正在混淆任务调度程序和作业。我认为您希望允许用户通过任务调度机制来安排作业。如果你不想依赖一个包。您可以将生成的作业链接到用户。因此可以按用户收集汇总的工作统计信息。
  • 我相信你对我把这两者混为一谈是正确的,我遇到的主要问题是重新安排的部分。我需要重新安排工作的原因是要导入的数据会发生很大变化,有时由于客户端的问题而不得不延迟,我最终可能不得不取消工作并仅使用任务调度程序来安排一个新的。感谢您的洞察力!

标签: php database laravel cron


【解决方案1】:

在这种情况下,它不必是任务调度程序。 您实际上是在寻找一个接口来调度作业。 这意味着您可以从控制器调用调度。 然后你可以在表中查找当前的工作。 如果您使用抽象基础作业链接作业。 这与用户有关。 如果作业有任何相关的其他模型或序列化模型。 您可以将它们附加到作业中。这样您就可以根据您的条件过滤队列中的作业。

您从构造函数分配为公共属性的每个模型都将自动序列化和反序列化(只要您在工作中使用 SerializesModels 特征)

Jobs 可以自动序列化 eloquent 模型。如果您有一个自定义类,也可以这样做。你只需要实现 Serializable 接口

然后,如果一个作业,可能会消耗和处理数据。你应该实现和 restart() 方法。或者其他的东西。这可能会保存可以保存的数据,并生成或安排新作业。

但是,如果您想在运行期间创建一个可中断的作业,就像您想取消它一样。正如你所说,你可能不得不实施类似的东西。这将检查是否有人请求中断。

这可以通过多种方式完成,具体取决于您的解决方案的规模。 一种简单的方法是使用缓存驱动程序使用锁。但在高负载下,这可能会带来一些回退。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    相关资源
    最近更新 更多