3

我正在尝试使用 Laravel 设置 IronMq 队列,并且我已经让它工作了,但关键是这种行为不是我们想要的。

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

代码结构如下:

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

有没有人找到防止并行行为并使其顺序的方法?

非常感谢你!

4

3 回答 3

2

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

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

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

于 2014-05-06T17:11:55.893 回答
1

您也可以尝试使用 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");
于 2014-05-07T02:35:45.247 回答
0

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

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

于 2014-05-20T10:37:18.547 回答