Как использовать AWS SQS / SNS в качестве очереди push-уведомлений для сложных задач обработки через PHP?

У меня есть один сервер, работающий на стойке, на котором размещается одно веб-приложение на PHP.

Веб-приложение PHP примет отправку формы, которая затем должна будет выполнить задачу на основе записей поля формы.

Задача (назовем ее задачей генерации метаданных) требует довольно много времени на обработку. Мне было интересно, как сделать так, чтобы отправка формы была простым сохранением в базе данных и сразу показывала страницу успеха пользователю при выполнении задачи создания метаданных в фоновом режиме.

Я установил"aws/aws-sdk-php": "~3.11" используя композитор в том же веб-приложении.

Мой план изначально такой:

код, который обрабатывает отправку формы

$result = $model->save($_POST);
// this code will send the information to either SQS or SNS
$awsClient->sendsMessage($_POST);
if ($result) {
  $this->redirect('success.html');
}

Я читал оразветвленная архитектура заявлено AWS.

Мои проблемы с примером архитектуры разветвления (насколько я понимаю) таковы:

сервер, который отправляет сообщение в SQS или SNS, также будет тем же сервером, который обрабатывает задачу создания метаданных. На самом деле это одно и то же веб-приложение.SQS выполняет часть очереди (потому что я хочу выполнять задачи в FIFO, и задачи занимают много времени). Однако для этого требуется, чтобы мое веб-приложение постоянно опрашивало SQS. Мне нужно push-уведомление (от AWS к моему веб-приложению), а не к тому, чтобы мое веб-приложение постоянно опрашивало AWS для проверки выполнения задач.

Я нашел возможное решение, предложенноеВот

Предлагаемое решение:

отправить сообщение в тему SNS.

В теме SNS будет отображаться как очередь SQS, так и мое веб-приложение.

После запуска мое веб-приложение будет опрашивать ту же очередь SQS, которая теперь непрерывно помещала в очередь сообщение, пока очередь не станет пустой.

Из этого я вижу недостаток, заключающийся в том, что мое веб-приложение будет опрашивать очередь, прежде чем сама очередь получит сообщение.

Каков наилучший способ реализации push-очередей с использованием сервисов AWS?

Ответы на вопрос(1)

Ваш ответ на вопрос