我正在尝试使用RabbitMQ队列驱动程序使用Laravel从外部服务中使用作业。
每个作业有效负载基本上都是一个序列化对象。
然而,在我看来,Laravel要求工作有一个名为“job”的属性,该属性映射到一个完全限定的类名(FQCN)。但我不能这样做,因为这些工作是在一个甚至不知道我的Laravel应用程序的服务上创建的。
我可以在没有这个属性的情况下消费和执行工作吗?
示例:
Laravel是否可以执行包含此有效负载的作业:
{
"fooBar": "abc-123",
"baz": false,
"bazBar": 1
}
而不是:
{
"job": "Acme\\\\Jobs\\\\FooJob",
"data": {
"fooBar": "abc-123",
"baz": false,
"bazBar": 1
}
}
答案 0 :(得分:1)
不,不是没有覆盖Laravel的工作调度员的一些方法。 Laravel的队列系统仅用于与Laravel一起使用,因此队列中有效负载的结构是它所期望的格式。如果您想使用其他框架使用排队作业,则可以使用多种选项。
1)忽略作业有效负载中的FQCN。但是,您将自己与Laravel的工作负载结构联系起来,如果这种情况发生变化,它可能会破坏您的应用程序。
2)覆盖Laravel的作业调度程序,将其传递的数据结构更改为队列。这似乎比它的价值更麻烦。
3)编写自己的作业调度程序,并使用您自己的类与队列系统进行交互。这使您可以完全控制如何使用队列。