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 gratuitoIl 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.
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.
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).
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).
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).
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).
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.
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.
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).
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).
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).
È 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.
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).
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).
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.
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).
Approfondisci
Esplora la guida per gli sviluppatori per scoprire come implementare il filtro dei messaggi per i tuoi argomenti SNS.
Guardalo in azione
Esplora un esempio che mostra come implementare il filtro dei messaggi utilizzando SDK AWS per Python.