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
Tempo para conclusão
30 minutos
Custo da conclusão (com métricas gratuitas)
Gratuito
Custo da conclusão (com métricas avançadas)
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
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.
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
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.
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"]}
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.
a. Na página do tópico Insurance-Quote-Requests, escolha Publicar mensagem.
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 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.
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.
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.
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.