Конфигурация очереди Lumen 5.1 SQS
Я создал новый проект, используя Lumen, чтобы заботиться о отправке электронной почты и некоторых других небольших задач. Однако для некоторых писем, которые нужно отправить, я хочу использовать очередь Amazon.
В документации Люмена, они единственное, что упоминается, это: Опция QUEUE_DRIVER в вашем .env файл определяет очередь "драйвер", который будет использоваться вашим приложением.
Я установил это в SQS, как и предлагалось, однако я немного озадачен фактическими учетными данными amazon. Как я должен их определять? Единственная "релевантная" вещь, которую я видел, - это документация Amazon Здесь и здесь. Я также установил пакет" aws/aws-sdk-php":" ~3.0".
Однако эти ресурсы относятся непосредственно к использованию API SQS. Я хочу иметь возможность вызывать очередь, как это описано в 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 AppHttpControllers;
use AppJobsGuestEmailJob;
use LaravelLumenRoutingController as BaseController;
use Log, Queue;
use AwsSqsSqsClient;
class NotificationEmailController extends BaseController
{
public function pushToQueue($id)
{
Queue::push(new GuestEmailJob($id));
//$this->dispatch(new GuestEmailJob($id));
}
}
И, наконец, это моя работа
<?php namespace AppJobs;
use IlluminateBusQueueable;
use IlluminateQueueSerializesModels;
use IlluminateQueueInteractsWithQueue;
use IlluminateContractsBusSelfHandling;
use IlluminateContractsQueueShouldQueue;
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()
. Когда запрос попадает на контроллер, все идет нормально до тех пор, пока не будет нажата очередь, и тогда ничего не происходит (никаких исключений тоже). У кого-нибудь есть идеи, что я делаю неправильно/упускаю?
1 ответ:
После того, как вы немного изучили исходный код, очевидно, у вас должна быть очередь.файл конфигурации php в каталоге config. Поэтому я просто вставил конфигурационный файл по умолчанию из 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', ], ];