Neste tutorial você vai aprender a aproveitar o recurso de filtragem de mensagens do Amazon Simple Notification Service (SNS). O recurso de filtragem de mensagens permite que endpoints que estão inscritos em um tópico do SNS recebam apenas o subconjunto de mensagens de seu interesse.

Em nosso exemplo, os usuários acessam um site para fazer solicitações de cotação de seguro. Essas solicitações de cotação podem ser para seguro de carros, seguro de embarcações ou seguro de vida. Quando há uma solicitação de cotação de seguro, a solicitação é encaminhada para uma série de sistemas de back-end. Há um sistema de vendas que processa o seguro veicular para automóveis e embarcações, outro sistema de vendas que processa o seguro de vida, além de um sistema de análise que precisa processar todas as solicitações de cotação.

Conforme aprendemos no tutorial Envie notificações de eventos de distribuição, vamos usar um padrão de distribuição de mensagens com SNS e SQS para desacoplar o site dos sistemas de back-end. Para que as notificações de evento sejam enviadas ao sistema de back-end correto, você pode 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 SNS é muito mais simples!

Você vai usar o Amazon SNS e o Amazon Simple Queue Service (SQS) neste tutorial. Ambos os serviços estão no nível gratuito da AWS.

 

Você precisa de uma conta para fazer a filtragem de mensagens na AWS

Crie uma conta gratuita

O nível gratuito da AWS inclui 1.000.000 de publicações para o Amazon Simple Notification Service e 1.000.000 de solicitações do Amazon Simple Queue Service.

Consulte os detalhes do nível gratuito da AWS »

 

Seu 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 seguro de carros, seguro de embarcações ou seguro de vida.  


a. Ao clicar aqui, o Console de Gerenciamento da AWS vai abrir em uma nova janela do navegador, permitindo que você mantenha este guia detalhado aberto. Quando a tela carregar, digite seu nome do 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.

tmt_filter-messages-sent-to-topics_1a

(clique para ampliar)

tmt_filter-messages-sent-to-topics_1a

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

1b-console-home

(clique para ampliar)

1b-console-home

c.  Clique em Tópicos no menu à esquerda.

1c-create-topic-nav-open

(clique para ampliar)

1c-dashboard

d.  Clique em Criar tópico.

 

1d-No-topics

(clique para ampliar)

1d-No-topics

e.  No campo de nome do tópico, digite Insurance-Quote-Requests e role a página para clicar em Criar tópico.

 

1e-create-topic-nav-closed

(clique para ampliar)

1e-create-topic-nav-closed

f.  O novo tópico é exibido na página de detalhes em Tópicos.

 

1f-topic-insurence-quote-request-created-success

(clique para ampliar)

1f-topic-insurence-quote-request-created-success

Cada sistema de vendas de seguros sonda as solicitações de cotação da sua respectiva fila de mensagens do SQS que está inscrita no tópico do SNS.

A primeira fila processará solicitações de cotação tanto para carros quanto para embarcações, a segunda fila processará as solicitações para seguro de vida, enquanto a terceira fila receberá todos. Com o intuito de alimentar o sistema de análise, a terceira fila vai capturar todas as solicitações de cotação independentemente do tipo de seguro. Essas preferências serão definidas como políticas de filtro nas assinaturas do SNS.

Nesta etapa, você vai criar as três filas e inscrever cada uma delas ao tópico do SNS.


a. Clique aqui para abrir o console do Amazon SQS em uma nova janela do navegador. Se a página inicial do SQS for exibida, clique em Get Started Now (Comece a usar agora). Caso contrário, prossiga para a próxima etapa.

 

tmt_filter-messages-sent-to-topics_2a

(clique para ampliar)

tmt_filter-messages-sent-to-topics_2a

b.  Na página Criar uma nova fila, insira Vehicle-Insurance-Quotes no campo Nome da fila.

Deixe a opção Fila padrão selecionada e clique em Criar fila rápido.

 

tmt_filter-messages-sent-to-topics_2b

(clique para ampliar)

tmt_filter-messages-sent-to-topics_2b

c.  Clique em Criar uma nova fila e repita a etapa 2b para criar duas outras filas:
Life-Insurance-Quotes
 e All-Quotes.

 

tmt_filter-messages-sent-to-topics_2c

(clique para ampliar)

tmt_filter-messages-sent-to-topics_2c

d.  Agora todas as três filas estão listadas no Console do SQS.

 

tmt_filter-messages-sent-to-topics_2d

(clique para ampliar)

tmt_filter-messages-sent-to-topics_2d

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


a.  Na lista de filas, selecione as filas Vehicle-Insurance-Quotes, Life-Insurance-Quotes e All-Quotes.

Clique em Ações de fila e selecione Inscrever filas no tópico do SNS.

 

 

tmt_filter-messages-sent-to-topics_3a

(clique para ampliar)

tmt_filter-messages-sent-to-topics_3a

b.  A caixa de diálogo Inscrever-se em um tópico é exibida. Na lista suspensa Escolha um tópico, selecione o tópico Insurance-Quote-Requests, no qual você deseja 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 fazer a inscrição nele usando o campo ARN do tópico. Para mais detalhes, consulte a documentação do Amazon SNS ou nossa publicação de blog, Integração entre contas com o SNS.

 

 

tmt_filter-messages-sent-to-topics_3b

(clique para ampliar)

tmt_filter-messages-sent-to-topics_3b

c.  Deixe a Região do tópico inalterada e clique em Inscrever.  

 

 

tmt_filter-messages-sent-to-topics_3c

(clique para ampliar)

tmt_filter-messages-sent-to-topics_3c

d.  A caixa de diálogo Resultado da inscrição do tópico é exibida. Clique em OK.

tmt_filter-messages-sent-to-topics_3d

(clique para ampliar)

tmt_filter-messages-sent-to-topics_3d

Agora que criamos todos os recursos do SNS e do SQS, 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 você não precisa definir uma política de filtragem para a fila All-Quotes nesse cenário.


a.  Volte para o console do Amazon SNS na outra janela de seu navegador e clique em Tópicos para acessar uma lista de todos os seus tópicos na região.

Clique no nome do tópico Insurance-Quote-Requests na lista.  

4a-topic-list

(clique para ampliar)

4a-topic-list

b.  Você será levado 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 clique em Editar.

4b-topic-detail-insurance-quote-request

(clique para ampliar)

4b-topic-detail-insurance-quote-request

c.  Você será levado para a página Editar assinatura. Clique na seta para editar a política de filtro de assinatura. 

4c-edit-sub-insurance-quote-request

(clique para ampliar)

4c-edit-sub-insurance-quote-request

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

Clique em Salvar alterações.

4d-topic-edit-filter-car-boat

(clique para ampliar)

4d-topic-edit-filter-car-boat

e.  Um diálogo de confirmação é exibido para confirmar que a política de filtro de assinatura foi criada com êxito.

 

4e-sub-saved-success

(clique para ampliar)

4e-sub-saved-success

f.  Agora você vai repetir o processo para adicionar a política de filtro à segunda fila. Selecione a fila Life-Insurance-Quotes e clique em Editar.

Clique na seta para editar a política de filtro de assinatura.

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

Clique em Salvar alterações.

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

4f-topic-edit-filter-life

(clique para ampliar)

4f-topic-edit-filter-life

Vamos testar tudo o que fizemos! Nesta etapa, você vai publicar mensagens no tópico para simular o recebimento de novas solicitações de cotação de seguro de seu site de geração de potenciais clientes.

Você publicará mensagens com diferentes atributos, de modo que possa ver o mecanismo de filtragem de mensagens do Amazon SNS em ação.


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

5a-topic-detail-with-3subs-2

(clique para ampliar)

5a-topic-detail-with-3subs-2

b.  Crie a primeira mensagem inserindo os seguintes valores no formulário:

Em assunto, insira: Insurance Quote Request #1.

Em Estrutura da mensagem, deixe a opção Carga idêntica para todos os protocolos de entrega selecionada.

Em “O corpo da mensagem a ser enviada ao endpoint”, insira o texto abaixo para representar uma solicitação de cotação de seguro de carro:
2017 Volvo S60, Montreal

Em Atributos de mensagem:

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

Clique em Publicar mensagem.

5b-publish-message-montreal-address

(clique para ampliar)

5b-publish-message-montreal-address

c.  Você volta para a página do tópico Insurance-Quote-Requests. Clique em Publicar mensagem novamente e crie uma mensagem usando os seguintes valores:

Em Assunto, insira: Insurance Quote Request #2.

Em Estrutura da mensagem, deixe a opção Carga idêntica para todos os protocolos de entrega selecionada.

Em O corpo da mensagem a ser enviada ao endpoint, insira o texto abaixo para representar uma solicitação de cotação de seguro de carro:
Male, 33 years old, Vancouver

Em Atributos de mensagem:

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

Clique em Publicar mensagem.

5c-publish-message-male33

(clique para ampliar)

5c-publish-message-male33

d.  Você volta para a página do tópico Insurance-Quote-Requests. Clique em Publicar mensagem novamente e crie uma mensagem usando os seguintes valores:

Em Assunto, insira: Insurance Quote Request #3.

Em Estrutura da mensagem, deixe a opção Carga idêntica para todos os protocolos de entrega selecionada.

Em “O corpo da mensagem a ser enviada ao endpoint”, insira o texto abaixo para representar uma solicitação de cotação de seguro de carro:
Townhouse, 1500 sq ft, Toronto

Em Atributos de mensagem:

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

Clique em Publicar mensagem.

5d-publish-message-toronto-address

(clique para ampliar)

5d-publish-message-toronto-address

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

Você verá que uma fila inscrita do Amazon SQS só terá recebido uma mensagem caso a assinatura correspondente no SNS tivesse uma política de filtro correspondente aos atributos da mensagem de entrada.

Você também perceberá que uma fila específica terá recebido 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 clique em Ações de fila.

Selecione Visualizar/excluir mensagens.  

tmt_filter-messages-sent-to-topics_6a

(clique para ampliar)

tmt_filter-messages-sent-to-topics_6a

b.  Clique em Iniciar busca por mensagens.

Observe que apenas uma mensagem foi enviada para essa fila e ela está relacionada à cotação de seguro de carro (Insurance Quote Request #1). Feche a caixa de diálogo.

tmt_filter-messages-sent-to-topics_6b

(clique para ampliar)

tmt_filter-messages-sent-to-topics_6b

c.  Repita o processo para a segunda fila. Marque a caixa de seleção da fila Life-Insurance-Quotes. Clique na lista suspensa Ações de fila e selecione Visualizar/excluir mensagens.

Clique em Iniciar busca por mensagens.

Observe que outra mensagem foi enviada para essa fila e ela está relacionada à cotação de seguro de vida (Insurance Quote Request #2).

Clique em Fechar.

tmt_filter-messages-sent-to-topics_6c

(clique para ampliar)

tmt_filter-messages-sent-to-topics_6c

d.  Por fim, marque a caixa de seleção da fila All-Quotes. Clique em Ações de fila, selecione Visualizar/excluir mensagens e clique em Iniciar busca por mensagens.

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

Clique em Fechar.

tmt_filter-messages-sent-to-topics_6d

(clique para ampliar)

tmt_filter-messages-sent-to-topics_6d

Nesta etapa, você excluirá os recursos criados para este tutorial, que incluem um tópico, as assinaturas e filas. Recomenda-se, como uma melhor prática, a exclusão dos recursos que não estejam mais sendo usados a fim de evitar cobranças.


a.  No console do Amazon SNS, clique em Tópicos e clique no link do tópico Insurance-Quote-Requests.

Etapa 7a

(clique para ampliar)

Etapa 7a

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

Clique em Excluir na caixa de diálogo para confirmar a exclusão. 

7b-topic-detail-with-3subs

(clique para ampliar)

7b-topic-detail-with-3subs

c.  Na página de detalhes do tópico Insurance-Quote-Requests, clique em Excluir.

Confirme a exclusão digitando excluir-me na caixa de diálogo e clique em Excluir

 

7c-topic-detail-no-sub

(clique para ampliar)

7c-topic-detail-no-sub

d.  Retorne ao console do Amazon SQS. Selecione todas as três filas usadas neste tutorial, clique em Ações de fila e então em Excluir filas.

Confirme a exclusão na caixa de diálogo.

tmt_filter-messages-sent-to-topics_7d

(clique para ampliar)

tmt_filter-messages-sent-to-topics_7d

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

tmt_filter-messages-sent-to-topics_7e

(clique para ampliar)

tmt_filter-messages-sent-to-topics_7e

Agora você pode usar a filtragem de mensagens no Amazon Simple Notification Service (SNS) para criar arquiteturas mais simples e otimizadas de publicação/assinatura.

A filtragem de mensagens permite que inscritos em 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 elimina a complexidade de projeto envolvida na implementação de lógica de filtragem de mensagens em seus assinantes ou de lógica de roteamento de mensagens em seus sistemas de publicação.


Agora que você aprendeu como implementar filtragem de mensagens usando o Amazon Simple Notification Service, selecione uma das seguintes opções para se aprofundar ainda mais nos sistemas de mensagens em nuvem da AWS.

Saiba mais

Confira uma visão geral das capacidades, componentes e casos de uso de tópicos de mensagem na Amazon Web Services (AWS).

Acesse a página do Amazon SNS »

Aprofunde-se

Explore o Guia do desenvolvedor para descobrir como implementar a filtragem de mensagens em seus tópicos do SNS.

Leia a documentação »

Veja em ação

Explore um exemplo que mostra como você pode implementar a filtragem de mensagens usando o AWS SDK para Python.

Leia o blog »

Sim
Não