尊龙凯时官网登录

laravel行列分发不进怎么办

在laravel开发中,使命行列是一个很是主要的组件,它可以让我们将一些耗时的操作异步执行,而不会影响到用户的体验 。laravel中的使命行列分为两个部分:使命分发和使命执行 。虽然在理论上使命分发应该是很简朴的,但有时间我们会遇到一些问题,好比使命分发不进,这时间该怎么办呢?

首先,我们需要确定使命分发是否乐成 。Laravel的使命分发是通过行列来实现的,我们可以通过审查行列的状态来确定使命是否已经被分发 。Laravel提供了一个下令来检查行列的状态,可以在终端中输入如下下令:

php artisan queue:work --status

登录后复制

执行完毕后,我们可以看到类似以下的输出:

Status check starting...
The "database" queue has 0 jobs processing.
The "redis" queue is not available.
Written jobs:
- Job 123 on connection "database"
- Job 456 on connection "redis"
- Job 789 on connection "redis"
...

登录后复制

这个下令会输出所有行列的状态,包括正在处理的使命和期待处理的使命 。我们需要注重的是,在Laravel中使命并不是连忙执行的,而是需要期待行列中的使命执行器(worker)来处理 。因此,纵然使命已经被乐因素发到行列中,我们也需要期待一段时间才华看到它被处理的情形 。

那么,若是我们已经确定使命分发乐成,但使命照旧没有被执行,这时间应该怎么办呢?下面是一些可能的解决要领:

检查行列驱动

Laravel支持多种差别的行列驱动,包括Redis、MySQL、Beanstalkd等 。若是你使用的是Redis或MySQL作为行列驱动,那么需要确保它们已经准确设置,并且能够正常地事情 。

详细来说,我们需要检查Laravel设置文件中的行列部分:

'connections' => [

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

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

    'beanstalkd' => [
        'driver' => 'beanstalkd',
        'host' => 'localhost',
        'queue' => 'default',
        'retry_after' => 90,
        'block_for' => 0,
    ],

    'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue' => 'default',
        'retry_after' => 90,
        'block_for' => null,
    ],

],

'default' => env('QUEUE_CONNECTION', 'sync'),

登录后复制

在这个设置文件中,我们需要确保毗连信息和行列信息都已经准确地设置 。若是没有准确设置,那么使命行列就无法事情 。

检查行列使命

若是行列已经准确设置,并且使命仍然没有被执行,那么我们需要检查行列中的使命是否有问题 。详细来说,我们需要检查使命类是否已经界说,使命要领是否已经实现,以及使命参数是否已经准确转达 。

下面是一个简朴的使命类界说:

<?php namespace App\Jobs;

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

class SendEmail 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()
    {
        //
    }
}

登录后复制

在这个使命类中,我们界说了一个SendEmail使命,它实现了ShouldQueue接口并且界说了一个handle()要领,这个要体会在使命被执行的时间被挪用 。若是这个使命类已经准确地界说,但使命仍然没有被执行,那么我们需要检查handle()要领中的代码是否有问题 。

检查使命执行器

若是行列和使命都没有问题,那么可能是使命执行器泛起了问题 。Laravel中的使命执行器通过queue:work下令来启动,我们可以在终端中输入如下下令来启动使命执行器:

php artisan queue:work

登录后复制

若是使命执行器没有正常运行,那么我们需要检查一下日志文件,看看是否有相关的过失信息 。Laravel的日志文件默认存储在storage/logs目录下,我们可以翻开最新的日志文件来审查 。

使用其他行列使命驱动

若是以上解决要领都没有起作用,那么我们可以实验使用其他的行列使命驱动来看看是否能解决问题 。好比,若是之前是使用Redis作为行列使命驱动,那么我们可以实验使用MySQL或Beanstalkd来替换看看 。

在Laravel中,我们可以很容易地更转业列使命驱动 。只需要修改Laravel设置文件中的行列驱动信息就可以了 。

总结来说,在遇到Laravel行列分发不进的问题时,我们需要先确定使命是否已经乐因素发到行列中,然后再逐步排查行列驱动、行列使命、使命执行器等方面的问题,直到找到解决要领为止 。

以上就是laravel行列分发不进怎么办的详细内容,更多请关注本网内其它相关文章!

免责说明:以上展示内容泉源于相助媒体、企业机构、网友提供或网络网络整理,版权争议与本站无关,文章涉及看法与看法不代表尊龙凯时官网登录滤油机网官方态度,请读者仅做参考 。本文接待转载,转载请说明来由 。若您以为本文侵占了您的版权信息,或您发明该内容有任何涉及有违公德、冒犯执法等违法信息,请您连忙联系尊龙凯时官网登录实时修正或删除 。

相关新闻

联系尊龙凯时官网登录

18523999891

可微信在线咨询

事情时间:周一至周五,9:30-18:30,节沐日休息

QR code
网站地图