laravel - 为什么MaxAttemptsExceededException

标签 laravel redis laravel-queue

我认为我不了解Laravel的队列系统。

我实现了Redis(基本配置),并且正在做非常基本的测试,但是此错误MaxAttemptsExceededException引起了我很多混乱。

该“测试”的想法是简单地通过浏览器运行控制器,并在控制器运行时在for循环内“分派”作业。在这个测试中,我的目标是每25秒发送1封电子邮件,我想每次运行控制器时,这些电子邮件都是“堆叠的”。

最初一切正常,但是突然,php artisan queue:work报告错误。

重点是:


超时的原因是什么?是Redis的延迟吗?
此参数正确使用queue:work --tries=3吗?
有什么我应该更改的设置吗?


enter image description here

.ENV

CACHE_DRIVER=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis
SESSION_CONNECTION=default


配置/数据库

    'redis' => [

        'client' => 'predis',

        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_DB', 0),
        ],

        'cache' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_CACHE_DB', 1),
        ],

    ],


配置/会话.PHP

'connection' => env('SESSION_CONNECTION', null),


我的控制器

        for ($i = 1; $i <= 5; $i++)
        {
            $when = now()->addSeconds(25 * $i);

            $mykey = 'KEY--' . $i . '--' . $when->toDateTimeString();

            dispatch(new TestRedisJob($mykey));
        }


我的工作类别(TestRedisJob)

    public function handle(Redis $redis)
    {
        Redis::throttle('email')->allow(1)->every(25)->then(function ()
        {
            \Mail::to('customer@domain.com')
                ->send(new OrderShipped('contato@fiscalizo.com.br', $this->mykey));

        }, function() {
            return $this->release(25);
        });


我的班级(已发货)

    public function build()
    {
        return $this
            ->from($this->emailFrom)
            ->subject("Registro Efetivado: " . $this->emailSubject)
            ->view('emails.welcome');

最佳答案

删除Redis $redis注入

public function handle()
{
    Redis::throttle('email')->allow(1)->every(25)->then(function ()
    {
        \Mail::to('customer@domain.com')
            ->send(new OrderShipped('contato@fiscalizo.com.br', $this->mykey));
     }, function() {
        return $this->release(25);
    });

关于laravel - 为什么MaxAttemptsExceededException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58769679/

相关文章:

php - 调用未定义的方法 Goutte\Client::setClient()

laravel - 流明:生成模型验证规则

php - 如何在PHP中使用Redis?

c# - 将 Redis 与 SignalR 结合使用

laravel - 对 Laravel 5 队列发送邮件感到困惑 (Laravel 5.4)

php - 我怎样才能只运行一次 Laravel 队列?

mysql - docker容器中出现"Base table or view not found"错误

Laravel groupBy 分页

docker - 如何设置 Redis Commander 和 Docker?

Laravel - 按顺序运行作业