2015-07-03 77 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');':) –