Laravel 的队列延迟分发问题

Laravel 的队列延迟分发问题,使用过程中的坑

QUEUE_DRIVER=sync  默认的,使用delay延时队列 不能使用同步的,否则不起作用

以下是原文档:

延迟分发

如果你想延迟执行一个队列中的任务,你可以用任务实例的 delay 方法。例如,我们指定一个任务在分配后 10 分钟内不可被处理:

delay(Carbon::now()->addMinutes(10));
    }
}

{note} Amazon SQS 队列服务最大延迟 15 分钟。

工作链

工作链允许你指定应该按顺序运行的队列列表。如果一个任务失败了,则其余任务将不会运行。你可以在分发任务的时候使用 withChain 方法来执行具有工作链的队列任务。

ProcessPodcast::withChain([
    new OptimizePodcast,
    new ReleasePodcast
])->dispatch();

自定义队列 & 连接

分发任务到指定队列

通过推送任务到不同的队列,你可以给队列任务分类,甚至可以控制给不同的队列分配多少任务。记住,这个并不是要推送任务到队列配置文件中不同的 「connections」 里,而是推送到一个连接中不同的队列里。要指定队列的话,就调用任务实例的 onQueue 方法:

onQueue('processing');
    }
}

分发任务到指定连接

如果你使用了多个队列连接,你可以将任务推到指定连接。要指定连接的话,你可以在分发任务的时候使用 onConnection 方法:

onConnection('sqs');
    }
}

当然,你可以链式调用 onConnection 和 onQueue 方法 来同时指定任务的连接和队列:

ProcessPodcast::dispatch($podcast)
              ->onConnection('sqs')
              ->onQueue('processing');

指定任务最大尝试次数 / 超时值

最大尝试次数

在一项任务中指定最大的尝试次数可以尝试通过 Artisan 命令行 --tries 来设置:

php artisan queue:work --tries=3

但是,你可以采取更为精致的方法来完成这项工作比如说在任务类中定义最大尝试次数。如果在类和命令行中都定义了最大尝试次数,Laravel 会优先执行任务类中的值:

超时

{note} timeout 功能针对 PHP 7.1+ 和 pcntl PHP 扩展进行了优化。

同样的,任务可以运行的最大秒数可以使用 Artisan 命令行上的 --timeout 开关指定:

php artisan queue:work --timeout=30

使用过程中的坑:如果你想延迟执行一个队列中的任务,
你可以用任务实例的 delay 方

QUEUE_DRIVER=sync  默认的,使用delay延时队列 不能使用同步的,否则不起作用,我用的 redis

 

文章原地址 :https://learnku.com/docs/laravel/5.5/queues/1324#delayed-dispatching

你可能感兴趣的:(php资料库)