我已经使用流明创建了一个新项目,负责发送电子邮件和其他一些小任务。但是,对于需要发送的一些电子邮件,我想使用Amazon的队列。流明5.1 SQS队列配置
在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()
。当请求到达控制器时,一切都很顺利,直到推入队列,然后什么也没有发生(也没有例外)。任何人都有任何想法我做错了/失踪?
然后将其添加到您的app.php文件中:'$ app-> configure('queue');':) –