¿Cómo usar AWS SQS / SNS como una cola de notificaciones push para tareas de procesamiento pesado a través de PHP?

Tengo un único servidor que se ejecuta en el espacio en rack que aloja una única aplicación web PHP.

La aplicación web PHP aceptará un envío de formulario que luego debe realizar una tarea basada en las entradas del campo de formulario.

La tarea (llamémosla la tarea de generar metadatos) requiere bastante tiempo de procesamiento. Me preguntaba cómo permitir que el envío del formulario sea un guardado directo en la base de datos e inmediatamente mostrar la página de éxito al usuario mientras ejecuta la tarea de generar metadatos en segundo plano.

He instalado"aws/aws-sdk-php": "~3.11" usando el compositor en la misma aplicación web.

Mi plan es inicialmente esto:

código que maneja el envío del formulario

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

He leído sobre elarquitectura fanout declarado por AWS.

Mis problemas con el ejemplo de arquitectura fanout (según tengo entendido) son los siguientes:

el servidor que envía el mensaje a SQS o SNS también será el mismo servidor que procesa la tarea de generar metadatos. De hecho, es la misma aplicación web.SQS cumple la parte de la cola (porque quiero ejecutar las tareas en un FIFO y las tareas toman mucho tiempo en completarse). Sin embargo, requiere que mi aplicación web realice encuestas SQS continuamente. Quiero una notificación automática (de AWS a mi aplicación web) en lugar de que mi aplicación web realice un sondeo continuo de AWS para verificar las tareas que se ejecutarán.

Encontré una posible solución sugeridaaquí

La solución sugerida es:

envíe el mensaje a un tema de SNS.

El tema SNS enviará un mensaje tanto a la cola SQS como a mi aplicación web.

Mi aplicación web, después de activarse, sondeará la misma cola SQS que ahora ha puesto en cola el mensaje continuamente hasta que la cola esté vacía

El inconveniente que veo de esto es que mi aplicación web sondeará la cola antes de que la cola misma tenga el mensaje.

¿Cuál es la mejor forma de implementar colas de inserción mediante los servicios de AWS?

Respuestas a la pregunta(1)

Su respuesta a la pregunta