首页 > 解决方案 > 如何使用我自己的 Laravel 课程?

问题描述

因此,我正在使用 Laravel 5.2,并尝试将 SQS 作为我的队列服务。

QueueSqs.php 中的 5.2 中有一个错误,已在此处修复 -> https://github.com/illuminate/queue/blob/5.6/SqsQueue.php在 5.6

现在我不确定我是否可以升级到 5.6,因为很多东西都在使用 5.2,我不想破坏任何东西。

但我确信我可以在 5.6 的代码中以某种方式使用这个类,并告诉 Laravel 以某种方式使用它。但我不知道该怎么做。

标签: phplaravellaravel-5

解决方案


我没有检查这是否在 Laravel 5 或类扩展中有效,但在较新的版本中,Laravel 通常会尝试从其容器中解析类,并将类的原始 FQNS 绑定到您的自定义 SqsQueue,而是返回您的每次使用原件时:

class AppServiceProvider extend ServiceProvider
{
    public function register()
    {
        $this->app->bind(\Illuminate\Queue\SqsQueue::class, function ($app) {
            return new CustomSqsQueue();
        });
    }
}

好吧,实际上,除了覆盖原始类并重新绑定它以供 Laravel 使用之外,您还可以添加自己的自定义队列连接器并使用它来代替 Laravel 原生 SQS 队列连接器:

要添加新的连接器供队列使用,请打开服务提供者并将以下代码添加到boot

public function register()
{
    $manager = $this->app['queue'];

    $manager->addConnector('sqs-custom', function() {
        return new CustomSqsQueue;
    });
}

然后,在 queue.php 配置中,基于原始 SQS 连接添加一个新连接,但使用您在第一个参数或addConnector服务提供者中选择的驱动程序名称。数组的键是用于定义队列的连接名称:

'sqs-custom' => [
    'driver' => 'sqs-custom',
    'key' => 'your-public-key',
    'secret' => 'your-secret-key',
    'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-account-id',
    'queue' => 'your-queue-name',
    'region' => 'us-east-1',
],

同样,这是未经测试的,但应该能够在 Laravel 5.2 中工作。


推荐阅读