Filtrar mensagens publicadas em tópicos com o Amazon SNS e o Amazon SQS

TUTORIAL

Visão geral

Neste tutorial, você aprenderá a utilizar o recurso de filtragem de mensagens do Amazon Simple Notification Service (Amazon SNS). O recurso de filtragem de mensagens permite que assinantes de um tópico do SNS recebam apenas o subconjunto de mensagens em que estão interessados.

Em nosso exemplo, os usuários acessam um site para solicitar cotações de seguro. Essas solicitações de cotação podem ser para seguros de veículos (como automóveis e barcos), seguros de vida ou outros tipos de seguros (como residencial). Quando um usuário solicita uma cotação de seguro, a solicitação é encaminhada para uma série de sistemas de back-end: um sistema de vendas gerencia seguros de veículos para automóveis e barcos, outro sistema de vendas trata de seguros de vida e um sistema de análise processa todas as solicitações de cotação.

Conforme aprendemos no tutorial Enviar notificações de eventos de fanout, vamos usar um padrão de distribuição de mensagens com o Amazon SNS e o Amazon Simple Queue Service (Amazon SQS) para desacoplar o site dos sistemas de back-end. Para que as notificações de eventos sejam enviadas ao sistema de back-end correto, é possível criar um tópico distinto para cada tipo de solicitação de cotação e então adicionar a lógica de roteamento de mensagem ao seu publicador. No entanto, essa opção pode resultar em publicadores desnecessariamente complicados, proliferação de tópicos e sobrecarga adicional no provisionamento e gerenciamento de seus tópicos do SNS. A filtragem de mensagens do Amazon SNS é muito mais simples!

Você usará o Amazon SNS e o Amazon SQS neste tutorial. Ambos os serviços estão disponíveis no nível gratuito da AWS.

 Experiência com a AWS

Intermediário

 Tempo para conclusão

30 minutos

 Custo da conclusão (com métricas gratuitas)

Gratuito

 Custo da conclusão (com métricas avançadas)

Os preços podem variar: USD 0,20 por milhão de objetos monitorados por mês ( página de preços do Amazon S3)

 Requisitos

Conta da AWS e um bucket do Amazon S3 preenchido

 Serviços usados

 Data da última atualização

23 de agosto de 2022

Implementação

Etapa 1: criar um tópico do SNS

O primeiro passo será criar um tópico do Amazon SNS para publicar mensagens sempre que houver solicitações de cotação em um site de seguros. Essas oportunidades de negócio podem estar relacionadas a seguros de automóveis, seguros de embarcações ou seguros de vida.  

a. Abra o Console de Gerenciamento da AWS em uma nova janela do navegador para manter aberto este guia detalhado. Quando a tela carregar, insira seu nome de usuário e senha para começar. Em seguida, digite notification (notificação) na barra de pesquisa e selecione Simple Notification Service para abrir o console do serviço.


b. Caso a página inicial do console do SNS seja exibida, escolha Começar com uma visão geral. Caso não veja essa página, pule para a próxima etapa.

c. No painel de navegação, escolha Tópicos.

d. Escolha o botão Criar tópico.

e. Em Tipo, selecione Padrão. No campo Nome, insira Insurance-Quote-Requests, role para baixo e escolha o botão Criar tópico.

f.  O novo tópico é exibido na página Detalhes do tópico.

Etapa 2: criar as filas do Amazon SQS

Cada sistema de vendas de seguros busca as solicitações de cotação na fila de mensagens correspondente do SQS que está inscrita no tópico do SNS.
 
A primeira fila processará solicitações de cotação tanto para automóveis quanto para embarcações, a segunda fila processará as solicitações para seguros de vida, enquanto a terceira fila receberá todos. Independentemente do tipo de seguro, a terceira fila irá capturar todas as solicitações de cotação para alimentar o sistema de análise. Essas preferências serão definidas como políticas de filtro nas assinaturas do SNS.
 
Nesta etapa, você criará três filas e inscreverá cada uma delas no tópico do SNS.

a. Abra o console do Amazon SQS em uma nova janela do navegador. Se a página inicial do Amazon SQS aparecer, escolha Criar fila. Caso contrário, prossiga para a próxima etapa.

b. Na página Criar fila, mantenha a opção Padrão selecionada para Tipo. Insira Vehicle-Insurance-Quotes no campo Nome e, em seguida, role para baixo e escolha o botão Criar fila.

c. A nova fila é mostrada na página Detalhes da fila. Selecione Filas para retornar à página inicial de Filas.

d. Escolha o botão Criar fila e repita as etapas 2b e 2c para criar duas filas adicionais usando os seguintes nomes: Life-Insurance-Quotes e All-Quotes.

e.  Agora todas as três filas são listadas no console do Amazon SQS.

Etapa 3: inscrever as filas no tópico

Agora que você criou as três filas no SQS, é necessário inscrevê-las no tópico do SNS que transmite novas solicitações de cotação de seguro.

a. Na lista de filas, selecione a fila All-Quotes.

Escolha Ações e selecione Inscrever em tópico do Amazon SNS.

b. A caixa de diálogo Inscrever em tópico do Amazon SNS é exibida. Na lista suspensa Especificar um tópico do Amazon SNS disponível para esta fila, selecione o tópico Insurance-Quote-Requests no qual você inscreverá suas três filas. Como você criou o tópico do SNS usando a mesma conta, ele é exibido na lista.

Se o tópico do SNS tivesse sido criado por outra conta, você poderia se inscrever nele usando o campo ARN do tópico. Para obter mais detalhes, consulte a Documentação do Amazon SNS ou a publicação no blog Integração entre contas com o Amazon SNS.

c. Escolha Salvar.

d. A fila agora está inscrita no tópico do SNS. Escolha Filas para retornar à página Filas e repita as etapas de a - c para as filas Life-Insurance-Quotes e Vehicle-Insurance-Quotes.

Etapa 4: definir políticas de filtro para as assinaturas do SNS

Agora que todos os recursos do Amazon SNS e do Amazon SQS foram criados, você está pronto para definir políticas de filtros para suas assinaturas do SNS. Uma política de filtro é simplesmente um documento JSON definido como um atributo da assinatura do SNS e que define um tipo de notificação na qual o assinante tem interesse.

Assinaturas sem políticas de filtro receberão todas as mensagens publicadas no tópico do SNS, então não é necessário definir uma política de filtragem para a fila All-Quotes nesse cenário.

a. Retorne ao console do Amazon SNS em sua outra janela do navegador e selecione Tópicos no painel de navegação para listar todos os seus tópicos na região.

Selecione o nome do tópico Insurance-Quote-Requests na lista. 

b. Você será direcionado para a página de detalhes do tópico Insurance-Quote-Requests na qual é possível ver todas as filas do SQS que estão inscritas nesse tópico do SNS. Selecione a fila Vehicle-Insurance-Quotes e escolha Editar.

c. Você será direcionado para a página Editar assinatura. Selecione a seta à esquerda de Política de filtro de assinatura e selecione Habilitada para editar a política.

d. Na caixa de diálogo exibida, insira o seguinte objeto JSON no editor JSON:
{"insurance_type": ["car", "boat"]}

Escolha Salvar alterações.

e. Uma mensagem de confirmação é exibida para indicar que a política de filtro de assinatura foi salva com sucesso. Clique em Insurance-Quote-Requests para voltar à página de detalhes do tópico.

f. Agora repita o processo para adicionar a política de filtro à segunda fila. Selecione a fila Life-Insurance-Quotes e escolha Editar.

g. Selecione a seta à esquerda de Política de filtro de assinatura e selecione Habilitada para editar a política.

h. Na caixa de diálogo exibida, insira o seguinte objeto JSON no editor JSON:
{"insurance_type": ["life"]}

 
Escolha Salvar alterações.

 

Não é necessário definir nenhuma política de filtro para a inscrição relacionada à fila All-Quotes. Esta ausência de política fará com que essa fila capture todos os eventos publicados no tópico.

Etapa 5: publicar mensagens no tópico

Vamos testar tudo o que fizemos. Nesta etapa, você poderá simular novas solicitações de cotação de seguro provenientes do seu site de geração de leads publicando mensagens no tópico.

Você publicará mensagens com diferentes atributos para poder ver o mecanismo de filtragem de mensagens do Amazon SNS em ação.

a. Na página do tópico Insurance-Quote-Requests, escolha Publicar mensagem.

b. Crie a primeira mensagem inserindo os seguintes valores no formulário:
 
Em Assunto, insira Insurance Quote Request #1.
 
Em Estrutura da mensagem, mantenha a opção Carga útil idêntica para todos os protocolos de entrega selecionada.
 
Em Corpo da mensagem a ser enviada ao endpoint, insira o seguinte texto para representar uma solicitação de cotação de seguro de automóvel:

2017 Volvo S60, Montreal

Em Atributos da mensagem:

  • Selecione String no campo Tipo
  • Insira insurance_type no campo Nome
  • Insira car no campo Valor.

Clique em Publicar mensagem.

c. Você é direcionado de volta para a página do tópico Insurance-Quote-Requests. Escolha Publicar mensagem novamente.

d. Crie uma segunda mensagem usando os seguintes valores:

Em Assunto, insira Insurance Quote Request #2.
 
Em Estrutura da mensagem, mantenha a opção Carga útil idêntica para todos os protocolos de entrega selecionada.
 
Em Corpo da mensagem a ser enviada ao endpoint, insira o seguinte texto para representar uma solicitação de cotação de seguro de automóvel:
 
Male, 33 years old, Vancouver

Em Atributos da mensagem:

  • Selecione String no campo Tipo
  • Insira insurance_type no campo Nome
  • Insira life no campo Valor.

Clique em Publicar mensagem.

e. Você é direcionado de volta para a página do tópico Insurance-Quote-Requests. Escolha Publicar mensagem novamente.

f. Crie uma terceira mensagem usando os seguintes valores:
 
Em Assunto, insira Insurance Quote Request #3.
 
Em Estrutura da mensagem, mantenha a opção Carga útil idêntica para todos os protocolos de entrega selecionada.
 
Em Corpo da mensagem a ser enviada ao endpoint, insira o seguinte texto para representar uma solicitação de cotação de seguro residencial:

Townhouse, 1500 sq ft, Toronto

Em Atributos da mensagem:

  • Selecione String no campo Tipo
  • Insira insurance_type no campo Nome
  • Insira home no campo Valor.

Clique em Publicar mensagem.

Etapa 6: verificar as entregas das mensagens

Está na hora de verificar se cada tipo de solicitação de cotação de seguro foi encaminhado para a fila de mensagem correspondente no Amazon SQS. Para fazer isso, basta inspecionar as entregas de mensagem que ocorreram.

Você verá que uma fila inscrita do Amazon SQS só recebeu uma mensagem se a assinatura correspondente no Amazon SNS teve uma política de filtro correspondente aos atributos da mensagem de entrada.
 
Você também perceberá que uma fila específica recebeu todas as mensagens publicadas no tópico. Isso aconteceu porque essa assinatura não tinha uma política de filtro definida, o que resultou em um comportamento de captura geral.

a. Retorne ao console do Amazon SQS. Selecione a fila Vehicle-Insurance-Quotes e escolha Enviar e receber mensagens.

b. Escolha Buscar mensagens.

c. Observe que apenas uma mensagem foi enviada para essa fila e ela está relacionada à cotação de seguro de automóvel (Insurance Quote Request #1). Quando o processo de busca estiver concluído, visualize a mensagem enviada para a fila selecionando a mensagem em Mensagens.

d. Visualize a mensagem e escolha Pronto para fechar a caixa de diálogo.

e. Repita o processo para a segunda fila. Selecione a fila Life-Insurance-Quotes e escolha Enviar e receber mensagens.

f. Escolha Buscar mensagens.

g. Observe que apenas uma mensagem foi enviada para essa fila e ela está relacionada à cotação de seguro de vida (Insurance Quote Request #2). Quando o processo de busca estiver concluído, visualize a mensagem enviada para a fila selecionando a mensagem em Mensagens.

h. Visualize a mensagem e escolha Pronto para fechar a caixa de diálogo.

i. Finalmente, selecione a fila All-Quotes e escolha Enviar e receber mensagens.

j. Escolha Buscar mensagens.

k. Observe que todas as três mensagens foram enviadas para esta fila (Insurance Quote Requests #1, #2 e #3).

Etapa 7: limpar recursos

Nesta etapa, você excluirá os recursos criados para este tutorial, que incluem um tópico, as assinaturas e filas. Recomenda-se excluir os recursos que não estão mais em uso para não incorrer em cobranças.

a. No painel de navegação do console do Amazon SNS, selecione Tópicos e, em seguida, escolha o link do tópico Insurance-Quote-Requests.

b. Na página de detalhes do tópico Insurance-Quote-Requests, selecione cada uma das assinaturas e clique em Excluir.

c. Escolha Excluir na caixa de diálogo para confirmar a exclusão.

d. Na página de detalhes do tópico Insurance-Quote-Requests, escolha Excluir.

e. Confirme a exclusão inserindo delete me na caixa de diálogo e, em seguida, escolha Excluir.

f. Retorne ao console do Amazon SQS. Selecione cada uma das filas usadas neste tutorial e escolha Excluir.

g. Confirme a exclusão inserindo delete na caixa de diálogo e, em seguida, escolha Excluir.

h.  Agora você pode sair do Console de Gerenciamento da AWS.

Conclusão

A filtragem de mensagens no Amazon SNS pode ser usada para criar arquiteturas mais simples e otimizadas de publicação/assinatura.

A filtragem de mensagens permite que assinantes de tópicos do Amazon SNS recebam seletivamente um subconjunto das mensagens de interesse, em vez de receberem todas as mensagens publicadas em um tópico. Isso permite a você descarregar a lógica de filtragem de mensagens dos seus assinantes e a lógica de roteamento de mensagens dos seus sistemas de publicadores.

Esta página foi útil para você?

Próximas etapas