Questo tutorial illustra come sfruttare la funzione di filtraggio dei messaggi di Amazon Simple Notification Service (SNS). La funzione di filtraggio dei messaggi permette agli endpoint iscritti a un argomento SNS di ricevere soltanto il sottoinsieme di messaggi degli argomenti a cui sono interessati.

Nel nostro esempio, gli utenti visitano un sito web per presentare delle richieste di preventivo assicurativo. Queste richieste di preventivo possono essere per polizza auto, polizza natanti o polizza vita. Quando viene presentata una richiesta di preventivo assicurativo, tale richiesta viene inoltrata a una serie di sistemi backend. Esiste un sistema di vendita che gestisce le polizze dei veicoli per auto e natanti, un altro sistema di vendita che gestisce le polizze vita e un sistema di analisi che deve elaborare tutte le richieste di preventivo.

Come abbiamo visto nel Tutorial su come Inviare notifiche di eventi in fan-out, adotteremo un modello di messaggistica fan-out utilizzando SNS e SQS per disaccoppiare il sito web dai sistemi backend. Per fare arrivare le notifiche di eventi al sistema backend corretto, puoi creare un argomento distinto per ciascun tipo di richiesta di preventivo, quindi aggiungere la logica di instradamento dei messaggi all'entità di pubblicazione. Tuttavia, questa opzione può avere come esisto entità di pubblicazione eccessivamente complicate, proliferazione degli argomenti e costi di esercizio aggiuntivi nel provisioning e nella gestione degli argomenti SNS. Il filtraggio di messaggi SNS è molto più semplice!

In questo tutorial, utilizzerai Amazon SNS e Amazon Simple Queue Service (SQS). Entrambi i servizi sono compresi nel piano gratuito di AWS.

 

Filtrare i messaggi in AWS richiede un account

Crea un account gratuito

Il piano gratuito AWS include 1.000.000 di pubblicazioni per Amazon Simple Notification Service e 1.000.000 di richieste di Amazon Simple Queue Service.

Visualizza i dettagli del piano gratuito di AWS »

 

La prima fase consiste nel creare un argomento Amazon SNS per pubblicare i messaggi ogni volta che vengono presentate delle richieste di preventivo sul sito web delle assicurazioni. Questi potenziali clienti possono essere correlati a polizza auto, polizza natanti o polizza vita.  


a. Facendo clic qui, la Console di gestione AWS si aprirà in una nuova finestra del browser, per consentirti di mantenere aperta questa guida dettagliata. Quando viene caricata la schermata, inserisci nome utente e password per iniziare. Quindi, digita notifica nella barra di ricerca e seleziona Simple Notification Service per aprire la console del servizio.

tmt_filter-messages-sent-to-topics_1a

(fai clic per ingrandire)

tmt_filter-messages-sent-to-topics_1a

b.  Se viene visualizzata la pagina di destinazione della console SNS, fai clic su Start with an overview (Avvia con una panoramica). Se non visualizzi questa pagina, passa alla fase successiva.

1b-console-home

(fai clic per ingrandire)

1b-console-home

c.  Fai clic su Topics (Argomenti) nel menu sulla sinistra.

1c-create-topic-nav-open

(fai clic per ingrandire)

1c-dashboard

d.  Fai clic su Create topic (Crea argomento).

 

1d-No-topics

(fai clic per ingrandire)

1d-No-topics

e.  Nel campo del nome Argomento, digita Insurance-Quote-Requests (Richieste di preventivi assicurativi), quindi scorri verso il basso per fare clic su Create topic (Crea argomento).

 

1e-create-topic-nav-closed

(fai clic per ingrandire)

1e-create-topic-nav-closed

f.  Il nuovo argomento viene visualizzato nella pagina dei dettagli Topic (Argomento).

 

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

(fai clic per ingrandire)

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

Ogni sistema di vendita di assicurazioni esegue il polling delle richieste di preventivo della propria coda di messaggi SQS corrispondente iscritta a questo argomento SNS.

La prima coda gestisce le richieste di preventivo sia per polizza auto che per polizza natante, la seconda coda gestisce le richieste di polizza vita e la terza coda comprende tutto. La terza coda comprende tutte le richieste di preventivo, a prescindere dal tipo di polizza, per alimentare un sistema di analisi. Queste preferenze verranno impostate come policy di filtro nelle iscrizioni SNS.

In questa fase, imparerai a creare le tre code e ad iscrivere ciascuna all'argomento SNS.


a. Fai clic qui per aprire la console di Amazon SQS in una nuova finestra del browser. Se viene visualizzata la pagina principale di SQS, fai clic su Comincia a usarlo. Altrimenti, procedi alla prossima fase.

 

tmt_filter-messages-sent-to-topics_2a

(fai clic per ingrandire)

tmt_filter-messages-sent-to-topics_2a

b.  Nella pagina Create New Queue (Crea nuova coda), inserisci Vehicle-Insurance-Quotes (Preventivi di polizze veicoli) nel campo Queue Name (Nome coda).

Lascia selezionato Standard Queue (Coda standard) e fai clic su Quick-Create Queue (Creazione rapida coda).

 

tmt_filter-messages-sent-to-topics_2b

(fai clic per ingrandire)

tmt_filter-messages-sent-to-topics_2b

c.  Fai clic su Create New Queue (Crea nuova coda) e ripeti la Fase 2b per creare altre due code:
Life-Insurance-Quotes
 (Code di polizze vita) e All-Quotes (Tutte le code).

 

tmt_filter-messages-sent-to-topics_2c

(fai clic per ingrandire)

tmt_filter-messages-sent-to-topics_2c

d.  Tutte e tre le code sono ora elencate nella console SQS.

 

tmt_filter-messages-sent-to-topics_2d

(fai clic per ingrandire)

tmt_filter-messages-sent-to-topics_2d

Ora che hai creato tre code Amazon SQS, devi iscriverle all’argomento Amazon SNS che trasmette nuove richieste di preventivi assicurativi.


a.  Nell'elenco delle code, seleziona le code Vehicle-Insurance-Quotes(Preventivi di polizze veicoli), Life-Insurance-Quotes (Preventivi di polizze vita) e All-Quotes (Tutti i preventivi).

Fai clic su Queue Actions (Azioni code) e seleziona Subscribe Queues to SNS Topic (Iscrivi code all’argomento SNS).

 

 

tmt_filter-messages-sent-to-topics_3a

(fai clic per ingrandire)

tmt_filter-messages-sent-to-topics_3a

b.  Viene visualizzata la finestra di dialogo Subscribe to a Topic (Iscrivi a un argomento). Nel menu a discesa Choose a Topic (Scegli un argomento), seleziona l'argomento Insurance-Quote-Requests (Richieste di preventivi assicurativi) a cui vuoi iscrivere le tre code. Poiché l'argomento SNS è stato creato dallo stesso account, viene visualizzato nell'elenco.

Se l’argomento SNS è stato creato da un altro account, puoi iscriverlo utilizzando il campo Topic ARN (ARN argomento). Per ulteriori dettagli, consulta la documentazione di Amazon SNS o il nostro blog, Cross-Account Integration with SNS (Integrazione di più account con SNS).

 

 

tmt_filter-messages-sent-to-topics_3b

(fai clic per ingrandire)

tmt_filter-messages-sent-to-topics_3b

c.  Lascia invariato Topic Region (Regione argomento) e fai clic su Subscribe (Iscrivi).  

 

 

tmt_filter-messages-sent-to-topics_3c

(fai clic per ingrandire)

tmt_filter-messages-sent-to-topics_3c

d.  Viene visualizzata la finestra di dialogo Topic Subscription Result (Risultato dell’iscrizione all’argomento). Fai clic su OK.

tmt_filter-messages-sent-to-topics_3d

(fai clic per ingrandire)

tmt_filter-messages-sent-to-topics_3d

Ora che sono state create tutte le risorse SNS e SQS, sei pronto per impostare le policy di filtro nelle iscrizioni SNS. Una policy di filtro è un semplice documento JSON, impostato come attributo dell'iscrizione SNS, che definisce il tipo di notifica a cui l'iscritto è interessato.

Le iscrizioni senza policy di filtro riceveranno tutti i messaggi pubblicati nell'argomento SNS, quindi per questo scenario non occorre impostare una policy di filtro per la coda All-Quotes (Tutte le code).


a.  Torna alla console Amazon SNS nell'altra tua finestra del browser e fai clic su Topics (Argomenti) per trovare un elenco di tutti i tuoi argomenti nella regione.

Fai clic sul nome di argomento Insurance-Quote-Requests (Richieste di preventivi assicurativi) nell'elenco.  

4a-topic-list

(fai clic per ingrandire)

4a-topic-list

b.  Così facendo accederai alla pagina dei dettagli dell'argomento Insurance-Quote-Requests (Richieste di preventivi assicurativi), dove potrai visualizzare tutte le code SQS iscritte a questo argomento SNS. Seleziona la coda Vehicle-Insurance-Quotes (Preventivi di polizze veicoli) e fai clic su Edit (Modifica).

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

(fai clic per ingrandire)

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

c.  Così facendo accederai alla pagina Edit subscription (Modifica iscrizione). Fai clic sulla freccia per modificare la policy di filtro dell'iscrizione. 

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

(fai clic per ingrandire)

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

d.  Nella finestra di dialogo visualizzata, inserici il seguente oggetto JSON:{"insurance_type": ["car", "boat"]}

Fai clic su Save changes (Salva modifiche).

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

(fai clic per ingrandire)

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

e.  Viene visualizzata una finestra di dialogo che conferma l'avvenuta creazione della policy di filtro.

 

4e-sub-saved-success

(fai clic per ingrandire)

4e-sub-saved-success

f.  Ora potrai ripetere il processo e aggiungere la policy di filtro nella seconda coda. Seleziona la coda Life-Insurance-Quotes (Preventivi polizze vita) e fai clic su Edit (Modifica).

Fai clic sulla freccia per modificare la policy di filtro dell'iscrizione.

Nella finestra di dialogo visualizzata, inserici il seguente oggetto JSON:{"insurance_type": ["life"]}

Fai clic su Save changes (Salva modifiche).

Non è necessario impostare alcuna policy di filtro per l'iscrizione relativa alla coda All-Quotes (Tutti i preventivi). Questa policy mancante farà in modo che la coda riceva tutti gli eventi pubblicati in questo argomento.

4f-topic-edit-filter-life

(fai clic per ingrandire)

4f-topic-edit-filter-life

Mettiamolo alla prova! In questa fase, sarai in grado di simulare nuove richieste d preventivo assicurativo in arrivo dal tuo sito web principale di generazione tramite la pubblicazione di messaggi nell'argomento.

Pubblicherai i messaggi con attributi diversi, affinché tu possa vedere in azione il meccanismo di filtro dei messaggi di Amazon SNS.


a.  Nella pagina degli argomenti Insurance-Quote-Requests (Richieste di preventivi assicurativi), fai clic su Publish message (Pubblica messaggio).

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

(fai clic per ingrandire)

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

b.  Crea il primo messaggio inserendo i seguenti valori nel modulo:

In Subject (Oggetto), inserisci: Richiesta di preventivo assicurativo n. 1

In Message structure (Struttura messaggio), lascia selezionato Identical payload for all delivery protocols (Payload identico per tutti i protocolli di consegna)

In Message body to send to the endpoint (Corpo del messaggio da inviare all'endpoint), inserisci il testo seguente per rappresentare una richiesta di preventivo di polizza auto:
2017 Volvo S60, Montreal

In Message attributes (Attributi messaggio):

  • Seleziona String (Stringa) nel campo Type (Tipo)
  • Inserisci insurance_type nel campo Name (Nome)
  • Inserisci autonel campo Value (Valore)

Fai clic su Publish message (Pubblica messaggio).

5b-publish-message-montreal-address

(fai clic per ingrandire)

5b-publish-message-montreal-address

c.  Torni alla pagina degli argomenti Insurance-Quote-Requests (Richieste di preventivi assicurativi). Fai di nuovo clic su Publish message (Pubblica messaggio) e crea un secondo messaggio con i seguenti valori:

In Subject (Oggetto), inserisci: Richiesta di preventivo assicurativo n. 2

In Message structure (Struttura messaggio), lascia selezionato Identical payload for all delivery protocols (Payload identico per tutti i protocolli di consegna)

In Message body to send to the endpoint (Corpo del messaggio da inviare all'endpoint), inserisci il testo seguente per rappresentare una richiesta di preventivo di polizza auto:
Maschio, 33 anni, Vancouver

In Message attributes (Attributi messaggio):

  • Seleziona String (Stringa) nel campo Type (Tipo)
  • Inserisci insurance_type nel campo Name (Nome)
  • Inserisci vita nel campo Value (Valore)

Fai clic su Publish message (Pubblica messaggio).

5c-publish-message-male33

(fai clic per ingrandire)

5c-publish-message-male33

d.  Torni alla pagina degli argomenti Insurance-Quote-Requests (Richieste di preventivi assicurativi). Fai di nuovo clic su Publish message (Pubblica messaggio) e crea un secondo messaggio con i seguenti valori:

In Subject (Oggetto), inserisci: Richiesta di preventivo assicurativo n. 3

In Message structure (Struttura messaggio), lascia selezionato Identical payload for all delivery protocols (Payload identico per tutti i protocolli di consegna)

In Message body to send to the endpoint (Corpo del messaggio da inviare all'endpoint), inserisci il testo seguente per rappresentare una richiesta di preventivo di polizza auto:
Casa in città, 140 mq, Toronto

In Message attributes (Attributi messaggio):

  • Seleziona String (Stringa) nel campo Type (Tipo)
  • Inserisci insurance_type nel campo Name (Nome)
  • Inserisci casa nel campo Value (Valore)

Fai clic su Publish message (Pubblica messaggio).

5d-publish-message-toronto-address

(fai clic per ingrandire)

5d-publish-message-toronto-address

È arrivato il momento di verificare che ogni tipo di richiesta di preventivo assicurativo sia stata indirizzata alla coda del messaggio SQS corrispondente, ispezionando le consegne del messaggio che si sono verificate.

Vedrai che una coda Amazon SQS in fase di iscrizione ha ricevuto un messaggio soltanto se l'iscrizione SNS corrispondente era dotata di una policy di filtro corrispondente agli attributi di questo messaggio in arrivo.

Vedrai inoltre che una coda in particolare ha effettivamente ricevuto tutti i messaggi pubblicati nell'argomento. Ciò è avvenuto perché questa iscrizione non dispone di set di policy di filtro, da cui il comportamento onnicomprensivo.


a.  Torna alla console di Amazon SQS. Seleziona la coda Vehicle-Insurance-Quotes (Preventivi di polizze veicoli) e fai clic su Queue Actions (Azioni coda).

Scegli View/Delete Messages (Visualizza/Elimina messaggi).  

tmt_filter-messages-sent-to-topics_6a

(fai clic per ingrandire)

tmt_filter-messages-sent-to-topics_6a

b.  Fai clic su Start Polling for Messages (Inizia polling per messaggi).

Soltanto un messaggio è stato spinto in questa coda, relativa al preventivo di polizza auto (Richiesta di preventivo assicurativo n. 1). Chiudi la finestra di dialogo.

tmt_filter-messages-sent-to-topics_6b

(fai clic per ingrandire)

tmt_filter-messages-sent-to-topics_6b

c.  Ripeti il processo per la seconda coda. Seleziona la casella relativa alla coda Life-Insurance-Quotes (Preventivi polizze vita). Nel menu a discesa Queue Actions (Azioni code), seleziona View/Delete Messages (Visualizza/Elimina messaggi).

Fai clic su Start Polling for Messages (Inizia polling per messaggi).

Un altro messaggio è stato spinto in questa coda, relativa al preventivo di polizza vita (Richiesta di preventivo assicurativo n. 2).

Fai clic su Close (Chiudi).

tmt_filter-messages-sent-to-topics_6c

(fai clic per ingrandire)

tmt_filter-messages-sent-to-topics_6c

d.  Infine, seleziona la casella relativa alla coda All-Quotes (Tutti i preventivi). Fai clic su Queue Actions (Azioni coda), seleziona View/Delete Messages (Visualizza/Elimina messaggi) e fai clic su Start Polling for Messages (Inizia polling per messaggi).

In questo caso, tutti e tre i messaggi sono stati spinti in questa coda (Richiesta di preventivo assicurativo n. 1, 2 e 3).

Fai clic su Close (Chiudi).

tmt_filter-messages-sent-to-topics_6d

(fai clic per ingrandire)

tmt_filter-messages-sent-to-topics_6d

In questa fase, eliminerai le risorse che hai creato per questo tutorial, che includono un argomento, le iscrizioni e le code. Per evitare di ricevere addebiti non desiderati, è una best practice consigliata eliminare le risorse non utilizzate.


a.  Nella console di Amazon SNS, fai clic su Topics (Argomenti), quindi fai clic sul link all'argomento Insurance-Quote-Requests (Richieste di preventivi assicurativi).

Fase 7a

(fai clic per ingrandire)

Fase 7a

b.  Nella pagina dei dettagli sull'argomento Insurance-Quote-Requests (Richieste di preventivi assicurativi), seleziona ciascuna iscrizione e fai clic su Delete (Elimina).

Fai clic su Delete (Elimina) nella finestra di dialogo per confermare l'eliminazione. 

7b-topic-detail-with-3subs

(fai clic per ingrandire)

7b-topic-detail-with-3subs

c.  Nella pagina dei dettagli sull'argomento Insurance-Quote-Requests (Richieste di preventivi assicurativi), fai clic su Delete (Elimina).

Conferma l'eliminazione digitando delete me (eliminami) nella finestra di dialogo e fai clic su Delete (Elimina). 

 

7c-topic-detail-no-sub

(fai clic per ingrandire)

7c-topic-detail-no-sub

d.  Torna alla console di Amazon SQS. Seleziona tutte e tre le code utilizzate in questo tutorial, fai clic su Queue Actions (Azioni coda) e quindi su Delete Queues (Elimina code).

Conferma l'eliminazione nella finestra di dialogo.

tmt_filter-messages-sent-to-topics_7d

(fai clic per ingrandire)

tmt_filter-messages-sent-to-topics_7d

e.  Ora, puoi disconnetterti dalla console di gestione AWS.  

tmt_filter-messages-sent-to-topics_7e

(fai clic per ingrandire)

tmt_filter-messages-sent-to-topics_7e

Ora puoi utilizzare il filtro dei messaggi su Amazon Simple Notification Service (SNS) per creare architetture pub/sub più semplici e lineari.

Questa funzionalità consente agli iscritti agli argomenti di Amazon SNS di ricevere soltanto un sottoinsieme dei messaggi a cui sono interessati, anziché ricevere tutti i messaggi pubblicati per un argomento. Ciò semplifica la complessità progettuale dell'implementazione della logica per i filtri dei messaggi dei tuoi iscritti o la logica di instradamento dei messaggi nei sistemi di pubblicazione.


Ora che hai imparato a implementare il filtro dei messaggi utilizzando Amazon Simple Notification Service, scegli una delle seguenti opzioni per approfondire la messaggistica cloud in AWS.

Ulteriori informazioni

Ottieni una panoramica su funzionalità, componenti e casi d'uso per gli argomenti dei messaggi su Amazon Web Services (AWS).

Visita la pagina Web di Amazon SNS »

Approfondisci

Esplora la guida per gli sviluppatori per scoprire come implementare il filtro dei messaggi per i tuoi argomenti SNS.

Consulta la documentazione »

Guardalo in azione

Esplora un esempio che mostra come implementare il filtro dei messaggi utilizzando SDK AWS per Python.

Leggi il blog »

No