Amazon объявила о своем new FIFO SQS service, и я бы хотел использовать его в очереди Laravel для решения некоторых проблем параллелизма.Как разместить Amazon FIFO SQS в очереди Laravel?
Я создал несколько новых очередей и изменил конфигурации. Тем не менее, я получил ошибку, которая говорит MissingParameter
The request must contain the parameter MessageGroupId.
Так я изменил файл vendor/laravel/framework/src/Illuminate/Queue/SqsQueue.php
public function pushRaw($payload, $queue = null, array $options = [])
{
$response = $this->sqs->sendMessage(['QueueUrl' => $this->getQueue($queue), 'MessageBody' => $payload,
'MessageGroupId' => env('APP_ENV', getenv('APP_ENV'))]);
return $response->get('MessageId');
}
public function later($delay, $job, $data = '', $queue = null)
{
$payload = $this->createPayload($job, $data);
$delay = $this->getSeconds($delay);
return $this->sqs->sendMessage([
'QueueUrl' => $this->getQueue($queue), 'MessageBody' => $payload, 'DelaySeconds' => $delay,
'MessageGroupId' => env('APP_ENV', getenv('APP_ENV'))
])->get('MessageId');
}
Я использую APP_ENV
как идентификатор группы (это одна очередь сообщений, так на самом деле это не Я просто хочу, чтобы все было FIFO).
Но я все еще получаю то же сообщение об ошибке. Как я могу это исправить? Любая помощь будет оценена по достоинству.
(кстати, где имеет SDK определен sendMessage
? Я могу найти заглушку для него, но я не нашел подробную реализацию)
Я должен был добавить в свой префикс в 'sqsfifo' соединение в' config/queue.php', но кроме этого, это работает безупречно! –
'MessageGroupId' => uniqid(), нарушает гарантию FIFO. Почему бы не использовать регулярную очередь в этот момент? https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/using-messagegroupid-property.html – Greg