2015-07-03 100 views
2

我已经使用流明创建了一个新项目,负责发送电子邮件和其他一些小任务。但是,对于需要发送的一些电子邮件,我想使用Amazon的队列。流明5.1 SQS队列配置

在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->dispatch()。当请求到达控制器时,一切都很顺利,直到推入队列,然后什么也没有发生(也没有例外)。任何人都有任何想法我做错了/失踪?

回答

5

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

]; 
+2

然后将其添加到您的app.php文件中:'$ app-> configure('queue');':) –