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!

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs