Laravel - 使用自定义处理方法和删除作业的推送队列任务
Laravel - Push queue task with a custom handling method and deleting job
考虑这种将任务推送到队列的代码 运行 位于同一 class:
中的自定义处理程序方法
<?php namespace Space;
class Spaceship {
public static function cruise()
{
// Throtting in 3 seconds...
Queue::later(3, '\Space\Spaceship@throttle', $coordinates, 'queue-name');
}
public static function throttle($job, $data)
{
$job->delete();
return 'ok';
}
}
这在我添加 $job->delete(); 之前工作正常;但现在它给出了一个错误:
exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Call to a member function delete() on a non-object
在 Laravel 4.2 docs 中没有解释为什么使用指向自定义处理程序方法的推送队列任务,您不需要使用 $job->delete() 从队列中显式删除任务?然而,这种实现是有效的,当 $job 参数被记录时,它是错误的。
转到 app\config\queue.php
并检查 default
键。如果后者设置为 sync
,则上述行为是预期的。
sync
driver 运行 立即完成您的任务,这意味着 Queue::later
实际上是 Queue::push
.
尝试将您的 Queue::later
转换为 Queue::push
,代码将 运行 没有错误。
至于显式删除队列中的任务,多半是没有必要的。但是,您必须考虑不提供自动删除作业的队列服务。
就我而言,AWS SQS(消息队列服务)会在作业从队列管中拉出后自动删除作业。
考虑这种将任务推送到队列的代码 运行 位于同一 class:
中的自定义处理程序方法<?php namespace Space;
class Spaceship {
public static function cruise()
{
// Throtting in 3 seconds...
Queue::later(3, '\Space\Spaceship@throttle', $coordinates, 'queue-name');
}
public static function throttle($job, $data)
{
$job->delete();
return 'ok';
}
}
这在我添加 $job->delete(); 之前工作正常;但现在它给出了一个错误:
exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Call to a member function delete() on a non-object
在 Laravel 4.2 docs 中没有解释为什么使用指向自定义处理程序方法的推送队列任务,您不需要使用 $job->delete() 从队列中显式删除任务?然而,这种实现是有效的,当 $job 参数被记录时,它是错误的。
转到 app\config\queue.php
并检查 default
键。如果后者设置为 sync
,则上述行为是预期的。
sync
driver 运行 立即完成您的任务,这意味着 Queue::later
实际上是 Queue::push
.
尝试将您的 Queue::later
转换为 Queue::push
,代码将 运行 没有错误。
至于显式删除队列中的任务,多半是没有必要的。但是,您必须考虑不提供自动删除作业的队列服务。
就我而言,AWS SQS(消息队列服务)会在作业从队列管中拉出后自动删除作业。