【问题标题】:Is it possible for Laravel to execute a Job without the "job" property in the payload?Laravel 是否可以在负载中没有“作业”属性的情况下执行作业?
【发布时间】:2016-09-26 18:27:08
【问题描述】:

我正在尝试使用 Laravel 使用 RabbitMQ 队列驱动程序从外部服务消费作业。

每个作业负载基本上都是一个序列化对象。

但是,在我看来,Laravel 要求作业具有一个名为“作业”的属性,该属性映射到完全限定的类名 (FQCN)。但我不能这样做,因为这些工作是在一个甚至不知道我的 Laravel 应用程序的服务上创建的。

我是否可以在没有此属性的情况下使用和执行作业?

例子:

Laravel 是否可以执行包含此有效负载的作业:

{
    "fooBar": "abc-123",
    "baz": false,
    "bazBar": 1
}

而不是这个:

{
    "job": "Acme\\\\Jobs\\\\FooJob",
    "data": {
        "fooBar": "abc-123",
        "baz": false,
        "bazBar": 1
    }
}

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    不,除非重写 Laravel 的作业调度程序中的一些方法。 Laravel 的队列系统被设计为仅与 Laravel 一起使用,因此队列中负载的结构是它所期望的格式。如果您想使用另一个框架使用排队的作业,您有很多选择。

    1) 忽略作业负载中的 FQCN。但是,您将自己束缚于 Laravel 的作业负载的结构,如果这种情况发生变化,它可能会破坏您的应用程序。

    2) 覆盖 Laravel 的作业调度程序以更改它传递给队列的数据结构。这似乎比它的价值更麻烦。

    3) 编写您自己的作业调度程序并使用您自己的类与队列系统进行交互。这使您可以完全控制如何使用队列。

    【讨论】:

    • 谢谢。您知道是否有任何库可以实现像您在 #3 中所说的更通用的作业调度程序?
    猜你喜欢
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 2013-12-06
    相关资源
    最近更新 更多