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.
- Crie um novo tópico ou selecione um tópico existente para receber as notificações filtradas.
- No tópico escolhido, vá para a aba “Subscrições” e clique em “Criar subscrição”.
- Selecione o protocolo desejado para a subscrição (por exemplo, HTTPS, Email, SMS, etc.).
- 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)
}
}
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)