流明5.1 SQS队列配置

Fot*_*tis 4 amazon-sqs laravel-5 lumen

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

在Lumen的文档中,他们只提到的是:.env文件中的QUEUE_DRIVER选项确定应用程序将使用的队列"驱动程序".

我按照建议将其设置为SQS,但是我对实际的亚马逊凭证感到有些困惑.我该怎么定义那些?我见过的唯一的"相关"的东西是从亚马逊的文档在这里这里.我还安装了"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
Run Code Online (Sandbox Code Playgroud)

这是我的控制器

<?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));
    }
}
Run Code Online (Sandbox Code Playgroud)

最后这是我的工作

<?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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我一直都与尝试过Queue::push$this->dispatch().当一个请求到达控制器时,一切正常,直到推送到队列然后没有任何反应(也没有例外).任何人都知道我做错了什么/错过了什么?

Fot*_*tis 7

看了一下源代码后,显然你应该在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',
    ],

];
Run Code Online (Sandbox Code Playgroud)

  • 然后将其添加到app.php文件中:`$ app-> configure('queue');`:) (2认同)