【发布时间】:2015-09-21 14:15:09
【问题描述】:
我使用 Lumen 创建了一个新项目,负责发送电子邮件和其他一些小任务。但是,对于一些需要发送的电子邮件,我想使用亚马逊的队列。
在 Lumen 的文档中,他们唯一提到的是: .env 文件中的 QUEUE_DRIVER 选项决定了应用程序将使用的队列“驱动程序”。
我已按照建议将其设置为 SQS,但是我对实际的亚马逊凭据感到有些困惑。我应该如何定义这些?我看到的唯一“相关”的东西来自亚马逊的文档here 和here。我还安装了 "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() 都试过了。当请求到达控制器时,一切都很好,直到推送到队列然后什么也没有发生(也没有例外)。有人知道我做错了什么/错过了什么吗?
【问题讨论】:
标签: laravel-5 amazon-sqs lumen