首页 > 解决方案 > Laravel 6 | 可配置的作业,将模型附加到作业

问题描述

问题

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

我的想法

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

问题

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

[
    "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" => ""
]

标签: phpdatabaselaravelcron

解决方案


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

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

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

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

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

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


推荐阅读