Php Laravel IronMq队列的意外并行执行

Php Laravel IronMq队列的意外并行执行,php,laravel,queue,ironmq,Php,Laravel,Queue,Ironmq,我正在尝试使用Laravel设置一个IronMq队列,我已经让它工作了,但问题是,该行为不是期望的行为 我希望IronMq等到作业完成($job->delete())才能推送新的作业,但我发现它在上一个作业完成之前推送消息 代码的结构如下所示: Route::post('queue/send' ,function() { ... Queue::push(function($job) use ($data) { ... $job->d

我正在尝试使用Laravel设置一个IronMq队列,我已经让它工作了,但问题是,该行为不是期望的行为

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

代码的结构如下所示:

Route::post('queue/send' ,function() 
{
    ...
    Queue::push(function($job) use ($data)
    {
        ...
        $job->delete();
    }
    return true;
}
是否有人找到了防止并行行为并使其有序化的方法


多谢各位

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

IronMQ,特别是它,听起来会在指定的时间间隔(您设置的时间间隔)内重试将消息推送到所需的端点X次(您设置的次数)-希望这将有助于解决您的问题


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

您也可以尝试使用IronMQ类而不是laravel队列类:

$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");

谢谢你的回答,我决定用Beanstalk代替IronMQ


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

在config/queue.php文件中将驱动程序设置为IronMq时,我看不到Laravel队列和IronMq队列之间的区别。它是如何解决并发问题的?我想轮询队列或使用Iron Worker是一种方法,但我不明白队列系统为何不能一次拥有一个进程。。。。重试不是一个解决方案,因为进程处理得很好,但存在一些并发性问题。谢谢你的回答!与延迟作业或应用程序内排队系统不同,推送队列不知道作业何时在服务器端完成。这两个系统是独立的。