DEV Community

Kaike Castro
Kaike Castro

Posted on

Como criar um Filtro no Amazon SNS para enviar um evento específico para o Amazon SQS

Olá, pessoal! Hoje vamos explorar uma solução interessante utilizando os serviços da AWS. Vamos aprender a criar um filtro no Amazon Simple Notification Service (SNS) para filtrar eventos que possuam o status “Finalizado”. Além disso, vamos integrar esse filtro com o Amazon Simple Queue Service (SQS) e construir um leitor de fila utilizando a linguagem de programação Golang.

Configurando o Filtro no Amazon SNS

1.Acesse o Console de Gerenciamento da AWS e navegue até o serviço Amazon SNS.

  1. Crie um novo tópico ou selecione um tópico existente para receber as notificações filtradas.
  2. No tópico escolhido, vá para a aba “Subscrições” e clique em “Criar subscrição”.
  3. Selecione o protocolo desejado para a subscrição (por exemplo, HTTPS, Email, SMS, etc.).
  4. Em “Filtro de tópico avançado”, adicione a condição: {"status": ["Finalizado"]}. Isso fará com que apenas eventos com o status "Finalizado" sejam enviados para esta subscrição.

Configurando a Integração com Amazon SQS

1.Ainda no Console do Amazon SNS, crie um novo tópico ou selecione um tópico existente.
2.No tópico escolhido, vá para a aba “Subscrições” e clique em “Criar subscrição”.
3.Selecione o protocolo SQS e escolha uma fila do SQS existente ou crie uma nova fila.

Criando o Leitor de Fila com Golang

Agora que temos as notificações filtradas sendo enviadas para a fila SQS, vamos criar um programa em Golang para ler essa fila e processar as mensagens.

package main

import (
 "fmt"
 "log"
 "os"
 "time"

 "github.com/aws/aws-sdk-go/aws"
 "github.com/aws/aws-sdk-go/aws/session"
 "github.com/aws/aws-sdk-go/service/sqs"
)

func main() {
 sess := session.Must(session.NewSessionWithOptions(session.Options{
  Config: aws.Config{Region: aws.String("us-east-1")}, 
 }))

 sqsClient := sqs.New(sess)

 queueURL := "URL_DA_FILA_SQS"

 for {
  result, err := sqsClient.ReceiveMessage(&sqs.ReceiveMessageInput{
   QueueUrl:            &queueURL,
   MaxNumberOfMessages: aws.Int64(10), // Número máximo de mensagens a serem recebidas de uma vez
  })

  if err != nil {
   log.Println("Erro ao receber mensagens da fila:", err)
   continue
  }

  for _, msg := range result.Messages {
   fmt.Println("Mensagem:", *msg.Body)

   _, err := sqsClient.DeleteMessage(&sqs.DeleteMessageInput{
    QueueUrl:      &queueURL,
    ReceiptHandle: msg.ReceiptHandle,
   })

   if err != nil {
    log.Println("Erro ao apagar mensagem da fila:", err)
   }
  }

  // Espera um tempo antes de receber mais mensagens (para evitar excesso de requisições)
  time.Sleep(5 * time.Second)
 }
}
Enter fullscreen mode Exit fullscreen mode

Conclusão

Com esses passos, você criou um filtro no Amazon SNS para eventos “Finalizados” e integrou esse filtro com o Amazon SQS. Além disso, criou um leitor de fila em Golang para processar essas mensagens. Essa solução pode ser escalada e personalizada de acordo com as suas necessidades. Divirta-se explorando mais possibilidades com os serviços da AWS e programação em Golang!

Top comments (0)