不希望的Laravel IronMq队列并行执行



我正试图用Laravel设置一个IronMq队列,我已经让它工作了,但关键是行为不是想要的。

我希望IronMq等到一个作业完成($job->delete())来推送一个新的,但是我发现它在前一个完成之前推送消息。

代码结构如下:

Route::post('queue/send' ,function() 
{
    ...
    Queue::push(function($job) use ($data)
    {
        ...
        $job->delete();
    }
    return true;
}

是否有人发现了防止并行行为并使其顺序的方法?

非常感谢!

推送队列自然会继续推送消息,不管任务是否完成,因为它们是两个独立的系统。其次,使用推送队列的目的是使其尽可能实时。

IronMQ特别具有重试功能,它将在指定的时间间隔(您设置)内重试将消息推送到所需的端点X次(您设置)—希望这将有助于解决您的问题。

如果您希望一个作业只在前一个作业完成后才被处理,并且稍微延迟是可以接受的,那么我建议轮询队列并分批检索。

你也可以尝试使用IronMQ类代替laravel Queue类:

$ironmq = new IronMQ(array(
    'token' => Config::get('queue.connections.iron.token', 'xxx'),
    'project_id' => Config::get('queue.connections.iron.project', 'xxx')
));
$ironmq->postMessage($queue_name, "Hello world");

感谢您的回答,我决定使用beanstald而不是IronMQ。

它要混乱得多,但它提供了所需的功能,我不依赖任何人。

相关内容

  • 没有找到相关文章