首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在带有Redis的Laravel 5.8中调度异步作业?

如何在带有Redis的Laravel 5.8中调度异步作业?
EN

Stack Overflow用户
提问于 2020-07-28 23:13:31
回答 1查看 969关注 0票数 2

我需要在Laravel 5.8中运行一个非常耗时的异步任务。这是.env文件

代码语言:javascript
复制
...
QUEUE_CONNECTION=sync
QUEUE_DRIVER=redis
...

队列驱动程序必须是Redis,因为网站使用带有redissocket.ioLaravel-Echo来广播消息,而我不能将队列驱动程序更改为database

这是我创建的工作

代码语言:javascript
复制
<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

class BroadcastRepeatJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        sleep(30);
    }
}

这是HomeController

代码语言:javascript
复制
public function index()
{
    BroadcastRepeatJob::dispatch()->onQueue("default");
    dd(1);
    ...
}

我还运行以下artisan命令

代码语言:javascript
复制
php artisan queue:work
php artisan queue:listen

当我访问HomeController/index时,我希望立即看到dd(1),而不是在30秒之后,因为sleep(30)必须在队列中运行,但这并没有发生,我必须等待30秒才能看到dd(1)。如何在后台异步运行作业?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-28 23:28:54

尝试将QUEUE_CONNECTION切换到redis而不是sync

代码语言:javascript
复制
 /*
    |--------------------------------------------------------------------------
    | Queue Connections
    |--------------------------------------------------------------------------
    |
    | Here you may configure the connection information for each server that
    | is used by your application. A default configuration has been added
    | for each back-end shipped with Laravel. You are free to add more.
    |
    | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"
    |
    */

    'connections' => [

        'sync' => [
            'driver' => 'sync',
        ],

        'database' => [
            'driver'        => 'database',
            'table'         => 'jobs',
            'queue'         => 'default',
            'retry_after'   => 90,
        ],

        'redis' => [
            'driver'        => 'redis',
            'connection'    => 'default',
            'queue'         => env('REDIS_QUEUE', 'default'),
            'retry_after'   => 90,
            'block_for'     => null,
        ],

    ],
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63137423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档