Como usar o AWS SQS / SNS como uma fila de notificações por push para tarefas de processamento pesado via PHP?

Eu tenho um único servidor em execução no rackspace que hospeda um único aplicativo da web PHP.

O aplicativo da web PHP aceita um envio de formulário que precisa executar uma tarefa com base nas entradas do campo de formulário.

A tarefa (vamos chamar de tarefa de gerar metadados) requer bastante tempo de processamento. Eu queria saber como permitir que o envio do formulário seja um salvamento direto no banco de dados e mostre imediatamente a página de sucesso ao usuário enquanto executa a tarefa gerar metadados em segundo plano.

Eu instalei"aws/aws-sdk-php": "~3.11" usando o compositor no mesmo aplicativo da web.

Meu plano é inicialmente este:

código que lida com o envio do formulário

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

Eu li sobre oarquitetura fanout declarado pela AWS.

Meus problemas com o exemplo da arquitetura fanout (como eu a entendo) são os seguintes:

o servidor que envia a mensagem para o SQS ou o SNS também será o mesmo servidor que processa a tarefa de gerar metadados. Na verdade, é o mesmo aplicativo da web.O SQS cumpre a parte da fila (porque desejo executar as tarefas em um FIFO e as tarefas demoram muito tempo para serem concluídas). No entanto, ele exige que meu aplicativo da web faça uma pesquisa contínua sobre SQS. Quero uma notificação por push (da AWS para o meu aplicativo da web) em vez do meu aplicativo da web que pesquisa a AWS continuamente para verificar se há tarefas a serem executadas.

Encontrei uma possível solução sugeridaaqui

A solução sugerida é:

envie a mensagem para um tópico do SNS.

O tópico SNS enviará uma mensagem para uma fila SQS e meu aplicativo da web.

Meu aplicativo Web, depois de acionado, pesquisará a mesma fila SQS que agora colocou a mensagem na fila continuamente até que a fila esteja vazia

A desvantagem que vejo disso é que meu aplicativo Web pesquisará a fila antes que a própria fila tenha a mensagem.

Qual é a melhor maneira de implementar filas push usando os serviços da AWS?

questionAnswers(1)

yourAnswerToTheQuestion