【问题标题】:Prevent similar queue job if job already in queue in laravel如果作业已经在 laravel 中的队列中,则阻止类似的队列作业
【发布时间】:2017-10-17 13:08:26
【问题描述】:

我正在使用 Beanstalkd 和 laravel 来处理队列作业。如果作业已经在队列中,我如何防止添加相同的作业。我正在使用 laravel 5.3 和 Beanstalkd 3.1

【问题讨论】:

  • 您的费率很低。对 SO 很重要,您必须使用已发布答案左侧、投票下方的勾号来标记已接受的答案。这将提高您的费率。通过访问此链接了解其工作原理:meta.stackoverflow.com/questions/5234/…

标签: laravel-5 beanstalkd


【解决方案1】:

没有阻止作业成为消息队列一部分的概念。 根本无法做到这一点。

确保您的代码以能够处理重复的方式编写。如果您仍然需要解决一些问题,可以查看 Redis 的 SortedSet,并使用它来永久存储您的工作。

【讨论】:

    【解决方案2】:

    有一个解决方案,您可以尝试在调度队列之前添加以下代码

    $queue = \DB::table(config('queue.connections.database.table'))->first();
        if($queue){
            $payload = json_decode($queue->payload,true);
            if($payload['displayName'] == 'App\Jobs\ProcessReport'){
                \flash('The report in process','info');
                return back()->withInput();
            }
        }
    //dispatch the queue
    ProcessReport::dispatch();
    

    【讨论】:

    • OP 特别提到使用 beanstalkd,而不是数据库,作为他们的队列驱动程序。数据库不应用于生产中的队列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2018-07-15
    • 2014-11-19
    • 2022-08-20
    • 2014-12-08
    • 1970-01-01
    相关资源
    最近更新 更多