Filtrar mensajes publicados en temas con Amazon SQS y Amazon SNS

TUTORIAL

Información general

En este tutorial, aprenderá a utilizar la función de filtrado de mensajes de Amazon Simple Notification Service (Amazon SNS). La función de filtrado de mensajes permite a los suscriptores a un tema de SNS recibir solo el subconjunto de mensajes del tema en el que está interesado.

En nuestro ejemplo, los usuarios visitan un sitio web para solicitar cotizaciones de seguros. Estas solicitudes de cotización pueden ser para seguros de vehículos (por ejemplo, para carros y barcos), seguros de vida u otros tipos de seguros (por ejemplo, para viviendas). Cuando un usuario solicita una cotización de seguro, la solicitud se reenvía a una serie de sistemas de backend: un sistema de ventas gestiona el seguro de vehículos para carros y barcos, otro sistema de ventas gestiona el seguro de vida y un sistema de análisis procesa todas las solicitudes de cotización.

Como aprendimos en el Tutorial para enviar notificaciones de eventos de distribución ramificada, usaremos un patrón de mensajería de distribución ramificada con Amazon SNS y Amazon Simple Queue Service (Amazon SQS) para desacoplar el sitio web de los sistemas backend. Para que las notificaciones de eventos lleguen al sistema backend correcto, podría crear un tema independiente para cada tipo de solicitud de cotización y, a continuación, agregar la lógica de redireccionamiento de mensajes a su editor. Sin embargo, esta opción puede resultar en editores demasiado complicados, una proliferación de temas y un aumento adicional de los gastos de aprovisionamiento y gestión de los temas de SNS. El filtrado de mensajes Amazon SNS es mucho más sencillo.

Utilizará Amazon SNS y Amazon SQS en este tutorial. Ambos servicios están incluidos en el nivel gratuito de AWS.

 Experiencia en AWS

Intermedio

 Tiempo de realización

30 minutos

 Costo de finalización (con métricas gratuitas)

Gratis

 Costo de finalización (con métricas avanzadas)

Los precios pueden variar: 0,20 USD por millón de objetos monitoreados al mes ( página de precios de Amazon S3)

 Requisitos

Una cuenta de AWS y un bucket de Amazon S3 poblado

 Servicios utilizados

 Última actualización

23 de agosto de 2022

Implementación

Paso 1: Crear un tema de SNS

El primer paso será crear un tema de Amazon SNS para publicar mensajes cada vez que se soliciten cotizaciones en un sitio web de seguros. Estos cables pueden estar relacionados con el seguro de carro, barco o vida.  

a. Abra la Consola de administración de AWS en una nueva ventana del navegador para poder mantener abierta esta guía paso a paso. Cuando la pantalla se cargue, ingrese su nombre de usuario y contraseña para comenzar. A continuación, escriba notification en la barra de búsqueda y seleccione Simple Notification Service para abrir la consola del servicio.


b. Si se muestra la página de inicio de la consola de SNS, haga clic en Comenzar con información general. Si no aparece esta página, continúe con el siguiente paso.

c. En el panel de navegación, elija Temas.

d. Seleccione el botón Crear tema.

e. En Tipo, seleccione Estándar. En el campo Nombre, escriba Insurance-Quote-Requests, desplácese hacia abajo y seleccione el botón Crear tema.

f.  El nuevo tema aparece en la página Detalles del tema.

Paso 2: Crear las colas de Amazon SQS

Cada sistema de venta de seguros solicita cotizaciones de la cola de mensajes de SQS correspondiente al tema de SNS.
 
La primera cola se encargará de las solicitudes de cotización de los seguros de carro y barco, la segunda de los seguros de vida y la tercera lo capturará todo. La tercera cola recogerá todas las solicitudes de cotización, independientemente del tipo de seguro, para alimentar un sistema de análisis. Estas preferencias se establecerán como políticas de filtrado en las suscripciones a SNS.
 
En este paso, creará las tres colas y suscribirá cada una al tema de SNS.

a. Abra la consola de Amazon SQS en una ventana de navegador nueva. Si aparece la página de inicio de Amazon SQS, seleccione Crear cola. De lo contrario, continúe con el siguiente paso.

b. En la página Crear cola, deje la opción Estándar seleccionada en Tipo. Introduzca Vehicle-Insurance-Quotes en el campo Nombre y, a continuación, desplácese hacia abajo y seleccione el botón Crear cola.

c. La nueva cola aparece en la página de Detalles de la cola. Seleccione Colaspara volver a la página de inicio de Colas.

d. Pulse el botón Crear cola y repita los pasos 2b y 2c para crear dos colas adicionales con los siguientes nombres: Life-Insurance-Quotes y All-Quotes.

e.  Las tres colas ahora figuran en la consola de Amazon SQS.

Paso 3: Suscribir las colas al tema

Ahora que ya creó las tres colas de Amazon SQS, debe suscribirlas al tema de SNS que transmite solicitudes de cotización de seguros nuevas.

a. En la lista de colas, seleccione la cola All-Quotes.

Elija Acciones y seleccione Suscribir al tema de Amazon SNS.

b. Se muestra el cuadro de diálogo Suscribir al tema de Amazon SNS. En la lista desplegable Especificar un tema de Amazon SNS disponible para esta cola, seleccione el tema Insurance-Quote-Requests, al que suscribirá sus tres colas. Debido a que ha creado el tema de SNS desde la misma cuenta, aparece en la lista.

Si el tema de SNS se creó con otra cuenta, puede suscribirse a él con el campo ARN del tema. Para obtener más información, consulte la documentación de Amazon SNS o nuestro blog, Integración entre cuentas con Amazon SNS.

c. Elija Guardar.

d. La cola ahora está suscrita al tema de SNS. Seleccione Colas para volver a la página de Colas y repita los pasos a-c para las colas Life-Insurance-Quotes y Vehicle-Insurance-Quotes.

Paso 4: Establecer políticas de filtrado para las suscripciones a SNS

Ahora que se han creado todos los recursos de Amazon SNS y Amazon SQS, puede establecer políticas de filtrado para las suscripciones a SNS. Una política de filtrado es un simple documento JSON, establecido como un atributo de la suscripción a SNS, que define el tipo de notificación que le interesa al suscriptor.

Las suscripciones que no cuentan con políticas de filtrado recibirán todos los mensajes publicados en el tema de SNS, por lo que no tendrá que establecer ninguna política de filtrado para la cola All-Quotes en este caso.

a. Vuelva a la consola de Amazon SNS en la otra ventana del navegador y seleccione Temas en el panel de navegación para ver una lista de todos los Temas en la región.

Haga clic en el tema Insurance-Quote-Requests en la lista. 

b. Esto lo enviará a la página de detalles del tema Insurance-Quote-Requests en la que podrá ver todas las colas de SQS suscritas a este tema de SNS. Seleccione la cola Vehicle-Insurance-Quotes y luego seleccione Editar.

c. Esto lo llevará a la página Editar suscripción. Seleccione la flecha situada a la izquierda de la Política de filtrado de la suscripción y, a continuación, seleccione Habilitada para editar la política.

d. En el cuadro de diálogo que aparece, escriba el siguiente objeto JSON en el editor JSON:
{"insurance_type": ["car", "boat"]}

Elija Guardar cambios

e. Aparece un mensaje de confirmación que confirma que la política de filtrado de suscripciones se guardó correctamente. Haga clic en Insurance-Quote-Requests para volver a la página de Detalles del tema,

f. Ahora repetirá el proceso agregando la política de filtrado a la segunda cola. Seleccione la cola Life-Insurance-Quotes y haga clic en Editar.

g. Seleccione la flecha situada a la izquierda de la Política de filtrado de la suscripción y, a continuación, seleccione Habilitada para editar la política.

h. En el cuadro de diálogo que aparece, escriba el siguiente objeto JSON en el editor JSON
{"insurance_type": ["life"]}

 
Elija Guardar cambios.

 

No tendrá que establecer ninguna política de filtrado para la suscripción relacionada con la cola All-Quotes. Esta falta de política hará que la cola reciba todos los eventos que se publiquen sobre el tema.

Paso 5: Publicar mensajes en el tema

Probémoslo. En este paso, podrá simular nuevas solicitudes de cotización de seguros que lleguen de su sitio web de generación de clientes potenciales al publicar mensajes en el tema.

Publicará mensajes con diferentes atributos, por lo que podrá ver el mecanismo de filtrado de mensajes de Amazon SNS en acción.

a. En la página del tema Insurance-Quote-Requests, haga clic en Publicar mensaje.

b. Cree el primer mensaje con los siguientes valores en el formulario:
 
En  Asunto, escriba:  Insurance Quote Request #1.
 
En  Estructura del mensaje, deje la opción  Carga idéntica para todos los protocolos de entrega seleccionada.
 
En  Cuerpo del mensaje que se enviará al punto de conexión, escriba el texto siguiente para representar una solicitud de cotización de un seguro de carro:

2017 Volvo S60, Montreal

En Atributos del mensaje:

  • Seleccione Cadena en el campo Tipo.
  • Escriba insurance_type en el campo Nombre.
  • Escriba car en el campo Valor.

Haga clic en Publicar mensaje.

c. Volverá a la página del tema Insurance-Quote-Requests. Vuelva a elegir Publicar mensaje.

d. Cree un segundo mensaje con los valores siguientes:

En  Asunto, escriba:  Insurance Quote Request #2
 
En  Estructura del mensaje, deje la opción  Carga idéntica para todos los protocolos de entrega seleccionada.
 
En  Cuerpo del mensaje que se enviará al punto de conexión, escriba el texto siguiente para representar una solicitud de cotización de un seguro de carro:
 
Hombre, 33 años, Vancouver

En Atributos del mensaje:

  • Seleccione Cadena en el campo Tipo.
  • Escriba insurance_type en el campo Nombre.
  • Escriba life en el campo Valor.

Haga clic en Publicar mensaje.

e. Volverá a la página del tema Insurance-Quote-Requests. Vuelva a elegir Publicar mensaje.

f. Cree un tercer mensaje con los valores siguientes:
 
En  Asunto, escriba:  Insurance Quote Request #3.
 
En  Estructura del mensaje, deje la opción  Carga idéntica para todos los protocolos de entrega seleccionada
 
En  Mensaje que se enviará al punto de conexión, escriba el texto siguiente para representar una solicitud de cotización de un seguro de carro:

Casa adosada, 140 000 metros cuadrados, Toronto

En Atributos del mensaje:

  • Seleccione Cadena en el campo Tipo.
  • Escriba insurance_type en el campo Nombre.
  • Escriba home en el campo Valor.

Haga clic en Publicar mensaje.

Paso 6: Comprobar las entregas de mensajes

Es momento de verificar que cada tipo de solicitud de cotización de seguro se haya redireccionado a la cola de mensajes de SQS correspondiente, al inspeccionar las entregas de mensajes que tuvieron lugar.

Verá que una cola de Amazon SQS suscrita ha recibido un mensaje solo si la suscripción a Amazon SNS correspondiente tenía una política de filtrado que coincidía con los atributos de este mensaje entrante.
 
También notará que una cola en particular recibió todos los mensajes publicados sobre el tema. Esto sucedió porque esta suscripción no tenía ninguna política de filtrado establecida, lo que provocó un comportamiento de captura total.

a. Vuelva a la consola de Amazon SQS. Seleccione la cola de Vehicle-Insurance-Quotes y elija Enviar y recibir mensajes.

b. Seleccione Sondeo para mensajes.

c. Tenga en cuenta que solo un mensaje se introdujo en esta cola, relacionado con esa cotización de seguro de carro (Insurance Quote Request #1). Una vez finalizado el proceso de sondeo, seleccione el mensaje enviado a la cola al elegir el mensaje en Mensajes.

d. Vea el mensaje y, a continuación, seleccione Listo para cerrar el cuadro de diálogo.

e. Repita el proceso de la segunda cola. Seleccione la cola de Life-Insurance-Quotes y elija Enviar y recibir mensajes.

f. Seleccione Sondeo para mensajes.

g. Tenga en cuenta que solo un mensaje se introdujo en esta cola, relacionado con esa cotización de seguro de carro (Insurance Quote Request #2). Una vez finalizado el proceso de sondeo, seleccione el mensaje enviado a la cola al elegir el mensaje en Mensajes.

h. Vea el mensaje y, a continuación, seleccione Listo para cerrar el cuadro de diálogo.

i. Por último, seleccione la cola All-Quotes y elija Enviar y recibir mensajes.

j. Seleccione Sondeo para mensajes.

k. Vea que los tres mensajes se han enviado a esta cola (Insurance Quote Requests #1, #2, y #3).

Paso 7: Eliminar los recursos

En este paso, eliminará los recursos que creó para el tutorial, que incluyen un tema, las suscripciones y las colas. Una práctica recomendada consiste en eliminar los recursos que ya no utiliza para evitar cargos adicionales.

a. En el panel de navegación de la consola de Amazon SNS, seleccione Temas y, a continuación, elija el enlace al tema Insurance-Quote-Requests.

b. En la página de detalles del tema Insurance-Quote-Requests, seleccione cada una de las suscripciones y haga clic en Eliminar.

c. Haga clic en Eliminar en el cuadro de diálogo para confirmar la eliminación.

d. En la página de detalles del tema Insurance-Quote-Requests, haga clic en Eliminar.

e. Confirme la eliminación escribiendo eliminarme en el cuadro de diálogo y, a continuación, seleccione Eliminar.

f. Vuelva a la consola de Amazon SQS. Seleccione cada una de las colas utilizadas en este tutorial y elija Eliminar.

g. Confirme la eliminación introduciendo "eliminar" en el cuadro de diálogo y, a continuación, seleccione Eliminar.

h.  Ahora puede cerrar sesión en la Consola de administración de AWS.

Conclusión

Ahora puede utilizar el filtrado de mensajes de Amazon SNS para crear arquitecturas de publicación o suscripción más sencillas y optimizadas.

El filtrado de mensajes permite a los suscriptores de temas de Amazon SNS recibir de manera selectiva solo un subconjunto de mensajes de su interés, en lugar de recibir todos los mensajes publicados en un tema. Esto le permite descargar la lógica de filtrado de mensajes de sus suscriptores y la lógica de enrutamiento de mensajes de los sistemas de sus editores.

¿Le resultó útil esta página?

Siguientes pasos