Я новичок в AWS и Laravel. Я пытаюсь получить сообщения из AWS SQS, используя метод $client->receiveMessage
. Каждое сообщение содержит значение идентификатора {'id': 'dynamic-id'}
, которое используется для чтения данных из базы данных (mysql)
и обновления данных до elastic search
. Ниже мой код, который выполняет указанные выше функции. Также сообщения добавляются от lambda
.
use Aws\Sqs\SqsClient;
use Aws\Exception\AwsException;
$client = new SqsClient([
'region' => 'my-region',
'version' => '2012-11-05'
]);
while(true) {
try {
$result = $client->receiveMessage(array(
'AttributeNames' => ['SentTimestamp'],
'MaxNumberOfMessages' => 1,
'MessageAttributeNames' => ['All'],
'QueueUrl' => $queueUrl, // REQUIRED
'WaitTimeSeconds' => 5,
));
if (!empty($result->get('Messages'))) {
$idJSON = json_decode($result->get('Messages')[0]['Body'], true);
static::update_to_elastic_search($idJSON['id']);
$result = $client->deleteMessage([
'QueueUrl' => $queueUrl, // REQUIRED
'ReceiptHandle' => $result->get('Messages')[0]['ReceiptHandle'] // REQUIRED
]);
} else {
echo "No messages in queue. \n";
}
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}
}
В настоящее время я запускаю этот код из консоли php artisan tinker
, используя объект и метод класса.
$s = new SQSAws;
$s->recive_message_from_sqs_and_update_to_es();
Я хочу, чтобы это работало постоянно, без какого-либо ручного вмешательства. Всякий раз, когда сообщение помещается в очередь, код будет читать и обновлять данные. Как я могу это сделать? Я пробовал с очередью laravel, но снова мне нужно поддерживать эту очередь в другой базе данных.