小编Tim*_*eld的帖子

多个队列侦听器将在多个进程上运行相同的作业

我有一个用Laravel 4.2框架编写的简单Web应用程序.我已配置Laravel队列组件以将新队列项添加到本地运行的beastalkd服务器.

基本上,有一个POST路由将一个项目添加到beanstalkd管.

然后我将supervisord设置artisan queue:listen为三个独立的进程运行.我看到的问题是,不同的queue:listen进程最终会在一到三个queue:worker进程中产生,只有一个插入的作业.

最终的结果是,插入队列的一个作业有时会被多个工作人员同时处理,这显然是我要避免的.

工作代码相对简单:

<?php

use App\Repositories\URLRepository;

class ProcessDataJob {
    private $urls;

    public function __construct(URLRepository $urls)
    {
        $this->urls = $urls;
    }

    public function fire($job, $data)
    {
        $input = $data['post'];

        if (!isset($data['post']) && !is_array($data['post'])) {
            Log::error('[Job #'.$job->getJobId().'] $input was empty inside CreateAuditJob. Deleting job. Quitting. Bye!');
            $job->delete();
            return false;
        }

        //
        // ... code that will take a few hours to run.
        //

        $job->delete();
        Log::info('[Job #'.$job->getJobId().'] ProcessDataJob was successful, deleting the job!'); …
Run Code Online (Sandbox Code Playgroud)

php beanstalkd laravel

9
推荐指数
1
解决办法
4091
查看次数

标签 统计

beanstalkd ×1

laravel ×1

php ×1