【问题标题】:Lumen 5.1 SQS queue configurationLumen 5.1 SQS 队列配置
【发布时间】:2015-09-21 14:15:09
【问题描述】:

我使用 Lumen 创建了一个新项目,负责发送电子邮件和其他一些小任务。但是,对于一些需要发送的电子邮件,我想使用亚马逊的队列。

在 Lumen 的文档中,他们唯一提到的是: .env 文件中的 QUEUE_DRIVER 选项决定了应用程序将使用的队列“驱动程序”。

我已按照建议将其设置为 SQS,但是我对实际的亚马逊凭据感到有些困惑。我应该如何定义这些?我看到的唯一“相关”的东西来自亚马逊的文档herehere。我还安装了 "aws/aws-sdk-php": "~3.0" 包。

但是,这些资源是指直接使用 SQS 的 API。我希望能够调用 Lumen 中描述的队列,例如 Queue::push()$this->dispatch()

这是我拥有的相关代码。

这是在我的 .env 文件中

QUEUE_DRIVER=sqs
AWS_KEY=key
AWS_SECRET=secretstuff
AWS_QUEUE=https://sqs.eu-west-1.amazonaws.com/
AWS_REGION=eu-west-1

这是我的控制器

<?php namespace App\Http\Controllers;

use App\Jobs\GuestEmailJob;
use Laravel\Lumen\Routing\Controller as BaseController;
use Log, Queue;
use Aws\Sqs\SqsClient;

class NotificationEmailController extends BaseController
{
    public function pushToQueue($id)
    {
        Queue::push(new GuestEmailJob($id));
        //$this->dispatch(new GuestEmailJob($id));
    }
}

最后这是我的工作

<?php namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Bus\SelfHandling;
use Illuminate\Contracts\Queue\ShouldQueue;
use Log;

abstract class GuestEmailJob implements SelfHandling, ShouldQueue
{
    use InteractsWithQueue, Queueable, SerializesModels;

    public function handle($id)
    {
        Log::info('within handle');
        $user = User::find($id);
    }
}

我用Queue::push$this-&gt;dispatch() 都试过了。当请求到达控制器时,一切都很好,直到推送到队列然后什么也没有发生(也没有例外)。有人知道我做错了什么/错过了什么吗?

【问题讨论】:

    标签: laravel-5 amazon-sqs lumen


    【解决方案1】:

    在查看了一下源代码之后,显然你应该在 config 目录下有 queue.php 配置文件。所以我只是粘贴了 laravel 5 中的默认配置文件并对其进行了自定义,现在它可以正常工作了。毕竟是非常愚蠢的问题,但从文档本身并不清楚。这是默认队列配置,以防万一有人也遇到这种情况。

    <?php
    
    return [
    
        'default' => env('QUEUE_DRIVER', 'sync'),
    
        'connections' => [
    
            'sync' => [
                'driver' => 'sync',
            ],
    
            'database' => [
                'driver' => 'database',
                'table' => 'jobs',
                'queue' => 'default',
                'expire' => 60,
            ],
    
            'beanstalkd' => [
                'driver' => 'beanstalkd',
                'host'   => 'localhost',
                'queue'  => 'default',
                'ttr'    => 60,
            ],
    
            'sqs' => [
                'driver' => 'sqs',
                'key'    => 'your-public-key',
                'secret' => 'your-secret-key',
                'queue'  => 'your-queue-url',
                'region' => 'us-east-1',
            ],
    
            'iron' => [
                'driver'  => 'iron',
                'host'    => 'mq-aws-us-east-1.iron.io',
                'token'   => 'your-token',
                'project' => 'your-project-id',
                'queue'   => 'your-queue-name',
                'encrypt' => true,
            ],
    
            'redis' => [
                'driver' => 'redis',
                'connection' => 'default',
                'queue'  => 'default',
                'expire' => 60,
            ],
    
        ],
    
        'failed' => [
            'database' => 'mysql', 'table' => 'failed_jobs',
        ],
    
    ];
    

    【讨论】:

    • 然后将其添加到您的 app.php 文件中:$app-&gt;configure('queue'); :)
    猜你喜欢
    • 2016-11-19
    • 2019-07-14
    • 2016-03-02
    • 2017-07-11
    • 2017-04-12
    • 2016-01-18
    • 2019-04-11
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多