Con este tutorial, aprenderá a utilizar la función de filtrado de mensajes de Amazon Simple Notification Service (SNS). La función de filtrado de mensajes permite a los puntos de enlace suscritos 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 un seguro de coche, barco o vida. Cuando se realiza una solicitud de cotización de seguro, esta se envía a una serie de sistemas backend. Existe un sistema de ventas que se encarga de los seguros de vehículos para coches y barcos, otro sistema de ventas que se encarga de los seguros de vida y un sistema de análisis que tiene que procesar todas las solicitudes de cotización.

Como aprendimos en el Tutorial para enviar notificaciones de eventos de distribución, usaremos un patrón de mensajería de distribución ramificada con SNS y 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 SNS es más sencillo.

En este tutorial, usará Amazon SNS y Amazon Simple Queue Service (Amazon SQS). Ambos servicios están incluidos en la capa gratuita de AWS.

 

El filtro de mensajes en AWS requiere una cuenta

Crear una cuenta gratuita

La capa gratuita de AWS incluye 1 000 000 de publicaciones para Amazon Simple Notification Service y 1 000 000 de solicitudes de Amazon Simple Queue Service.

Consulte los detalles de la capa gratuita de AWS »

 

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 clientes potenciales pueden estar relacionados con el seguro de coche, barco o vida.  


a. Cuando haga clic aquí, se abrirá la consola de administración de AWS en una ventana nueva del navegador para que pueda seguir teniendo abierta esta guía paso a paso. Cuando la pantalla se cargue, escriba 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.

tmt_filter-messages-sent-to-topics_1a

(Haga clic para ampliar)

tmt_filter-messages-sent-to-topics_1a

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.

1b-console-home

(Haga clic para ampliar)

1b-console-home

c.  Haga clic en Temas en el lado izquierdo del menú.

1c-create-topic-nav-open

(Haga clic para ampliar)

1c-dashboard

d.  Haga clic en Crear tema.

 

1d-No-topics

(Haga clic para ampliar)

1d-No-topics

e.  En el campo Nombre del tema, escriba Insurance-Quote-Requests y, a continuación, desplácese hacia abajo y seleccione Crear tema.

 

1e-create-topic-nav-closed

(Haga clic para ampliar)

1e-create-topic-nav-closed

f.  El nuevo tema aparece en la página de detalles Tema.

 

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

(Haga clic para ampliar)

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

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 coche y barco; la segunda, de los seguros de vida y la tercera, de 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. Haga clic aquí para abrir la consola de Amazon SQS en una ventana de navegador nueva. Si se muestra la página de inicio de SQS, haga clic en Get Started Now (Empezar ahora). De lo contrario, continúe con el siguiente paso.

 

tmt_filter-messages-sent-to-topics_2a

(Haga clic para ampliar).

tmt_filter-messages-sent-to-topics_2a

b.  En la página Crear cola nueva, escriba Vehicle-Insurance-Quotes en el campo Nombre de cola.

Deje la opción Cola estándar seleccionada y haga clic en Creación rápida de cola.

 

tmt_filter-messages-sent-to-topics_2b

(Haga clic para ampliar)

tmt_filter-messages-sent-to-topics_2b

c.  Haga clic en Crear cola nueva y repita el Paso 2b para crear dos colas adicionales:
Life-Insurance-Quotes
 y All-Quotes.

 

tmt_filter-messages-sent-to-topics_2c

(Haga clic para ampliar)

tmt_filter-messages-sent-to-topics_2c

d.  Las tres colas ahora figuran en la consola de SQS.

 

tmt_filter-messages-sent-to-topics_2d

(Haga clic para ampliar)

tmt_filter-messages-sent-to-topics_2d

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


a.  En la lista de colas, seleccione Vehicle-Insurance-Quotes, Life-Insurance-Quotes y All-Quotes.

En Acciones para colas, seleccione Suscribir colas a tema de SNS.

 

 

tmt_filter-messages-sent-to-topics_3a

(Haga clic para ampliar)

tmt_filter-messages-sent-to-topics_3a

b.  Se muestra el cuadro de diálogo Suscribir a un tema. En la lista desplegable Elegir un tema, seleccione el tema Insurance-Quote-Requests al que quiere suscribir las 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 Tema de ARN. Para obtener más información, consulte la documentación de Amazon SNS o nuestro blog, Integración entre cuentas con SNS (en inglés).

 

 

tmt_filter-messages-sent-to-topics_3b

(Haga clic para ampliar)

tmt_filter-messages-sent-to-topics_3b

c.  Deje la sección Región del tema sin modificar y haga clic en Suscribir.  

 

 

tmt_filter-messages-sent-to-topics_3c

(Haga clic para ampliar)

tmt_filter-messages-sent-to-topics_3c

d.  Se muestra el cuadro de diálogo Resultado de suscripción al tema. Haga clic en OK (Aceptar).

tmt_filter-messages-sent-to-topics_3d

(Haga clic para ampliar)

tmt_filter-messages-sent-to-topics_3d

Ahora que se han creado todos los recursos de SNS y 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 haga clic en Temas para encontrar una lista de todos sus temas en la región.

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

4a-topic-list

(Haga clic para ampliar)

4a-topic-list

b.  Esto lo enviará a la página de detalles  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 haga clic en Editar.

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

(Haga clic para ampliar)

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

c.  Esto lo llevará a la página Editar suscripción. Haga clic en la flecha para editar la suscripción a la política de filtrado. 

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

(Haga clic para ampliar)

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

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

Haga clic en Guardar los cambios.

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

(Haga clic para ampliar)

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

e.  Aparece un cuadro de confirmación para confirmar que se ha creado correctamente la política de filtrado de suscripciones.

 

4e-sub-saved-success

(Haga clic para ampliar)

4e-sub-saved-success

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.

Haga clic en la flecha para editar la suscripción a la política de filtrado.

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

Haga clic en Guardar los 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.

4f-topic-edit-filter-life

(Haga clic para ampliar)

4f-topic-edit-filter-life

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 sobre 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.

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

(Haga clic para ampliar)

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

b.  Cree el primer mensaje con los siguientes valores en el formulario:

En Tema, escriba: Solicitud de cotización de seguro 1

En Estructura de mensajes, deje la opción Carga idéntica para todos los protocolos de entrega seleccionada

En Mensaje que se enviará al punto de enlace, escriba el texto siguiente para representar una solicitud de cotización de un seguro de coche:
2017 Volvo S60, Montreal

En Atributos de los mensajes:

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

Haga clic en Publicar mensaje.

5b-publish-message-montreal-address

(Haga clic para ampliar)

5b-publish-message-montreal-address

c.  Volverá a la página del tema Insurance-Quote-Requests. Haga clic en Publicar mensaje de nuevo y cree un segundo mensaje con los valores siguientes:

En Tema, escriba: Solicitud de cotización de seguro 2

En Estructura de mensajes, deje la opción Carga idéntica para todos los protocolos de entrega seleccionada

En Mensaje que se enviará al punto de enlace, escriba el texto siguiente para representar una solicitud de cotización de un seguro de coche:
Hombre, 33 años, Vancouver

En Atributos de los mensajes:

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

Haga clic en Publicar mensaje.

5c-publish-message-male33

(Haga clic para ampliar)

5c-publish-message-male33

d.  Volverá a la página del tema Insurance-Quote-Requests. Haga clic en Publicar mensaje de nuevo y cree un segundo mensaje con los valores siguientes:

En Tema, escriba: Solicitud de cotización de seguro 3

En Estructura de mensajes, deje la opción Carga idéntica para todos los protocolos de entrega seleccionada

En Mensaje que se enviará al punto de enlace, escriba el texto siguiente para representar una solicitud de cotización de un seguro de coche:
Casa adosada, 139 metros cuadrados, Toronto

En Atributos de los mensajes:

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

Haga clic en Publicar mensaje.

5d-publish-message-toronto-address

(Haga clic para ampliar)

5d-publish-message-toronto-address

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. Para ello, inspeccione 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 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 general.


a.  Vuelva a la consola de Amazon SQS. Seleccione la cola Vehicle-Insurance-Quotes y haga clic en Acciones para colas.

Elija Ver o eliminar mensajes.  

tmt_filter-messages-sent-to-topics_6a

(Haga clic para ampliar)

tmt_filter-messages-sent-to-topics_6a

b.  Haga clic en Iniciar sondeo de mensajes.

Tenga en cuenta que solo un mensaje se introdujo en esta cola, relacionado con esa cotización de seguro de coche (Solicitud de cotización de seguro 1). Cierre el cuadro de diálogo.

tmt_filter-messages-sent-to-topics_6b

(Haga clic para ampliar)

tmt_filter-messages-sent-to-topics_6b

c.  Repita el proceso de la segunda cola. Marque la casilla de la cola Life-Insurance-Quotes. En la lista desplegable Acciones para colas, seleccione Ver o eliminar mensajes.

Haga clic en Iniciar sondeo de mensajes.

Tenga en cuenta que se introdujo otro mensaje en esta cola, relacionado con esa cotización de seguro de coche (Solicitud de cotización de seguro 2).

Haga clic en Cerrar.

tmt_filter-messages-sent-to-topics_6c

(Haga clic para ampliar)

tmt_filter-messages-sent-to-topics_6c

d.  Por último, marque la casilla de la cola All-Quotes. Haga clic en Acciones para colas, seleccione Ver o eliminar mensajes y, a continuación, haga clic en Iniciar sondeo de mensajes.

Vea que los tres mensajes se han enviado a esta cola (Solicitudes de cotización de seguro 1, 2 y 3).

Haga clic en Cerrar.

tmt_filter-messages-sent-to-topics_6d

(Haga clic para ampliar)

tmt_filter-messages-sent-to-topics_6d

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 la consola Amazon SNS, haga clic en Temas y, a continuación, seleccione el enlace al tema Insurance-Quote-Requests.

Paso 7a

(Haga clic para ampliar)

Paso 7a

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

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

7b-topic-detail-with-3subs

(Haga clic para ampliar)

7b-topic-detail-with-3subs

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

Para confirmar la eliminación, escriba eliminarme en el cuadro de diálogo y haga clic en Eliminar

 

7c-topic-detail-no-sub

(Haga clic para ampliar)

7c-topic-detail-no-sub

d.  Vuelva a la consola de Amazon SQS. Seleccione las tres colas que se han utilizado en este tutorial, haga clic en Acciones para colas y, a continuación, haga clic en Eliminar colas.

Confirme la eliminación en el cuadro de diálogo.

tmt_filter-messages-sent-to-topics_7d

(Haga clic para ampliar)

tmt_filter-messages-sent-to-topics_7d

e.  Ahora puede cerrar sesión en la consola de administración de AWS.  

tmt_filter-messages-sent-to-topics_7e

(Haga clic para ampliar)

tmt_filter-messages-sent-to-topics_7e

Ahora puede utilizar el filtrado de mensajes de Amazon Simple Notification Service (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 elimina la complejidad de diseño que supone implementar la lógica de filtrado de mensajes en los suscriptores o la lógica de direccionamiento de mensajes en los sistemas que realizan la publicación.


Ahora que ya aprendió a implementar el filtrado de mensajes con Amazon Simple Notification Service, elija una de las siguientes opciones para leer información más detallada acerca del envío de mensajes a través de la nube en AWS.

Más información

Obtenga información general sobre las capacidades, los componentes y los casos de uso de los temas de mensajes en Amazon Web Services (AWS).

Visite la página web de Amazon SNS »

Profundizar conocimientos

Explore la Guía para desarrolladores para conocer cómo implementar el filtrado de mensajes en sus temas de SNS.

Lea la documentación »

Ver en acción

Explore un ejemplo que muestra cómo implementar el filtrado de mensajes mediante AWS SDK para Python.

Lea el blog »

No