Azure Service Bus : Topic Brokered Message

En las entradas anteriores ( I,II y III ) vimos una pequeña introducción a las colas de Service Bus y ya empezamos a hablar, ligeramente de los Topics. A lo largo de esta entrada ( en esta ocasión el tema no da para una serie) veremos más detenido el concepto de Topic.

 

Multiples lectores/subscriptores

Este título es el concepto que define un Topic de la mejor forma. En muchas ocasiones, necesitamos que un mismo mensaje de una cola pudiera ser procesado por múltiples clientes, por ejemplo para que cada uno de ellos le pudiera dar un tratamiento diferente. Por poner un ejemplo, imagínese que está construyendo un sistema de procesado de datos en tiempo real y que cada dato tiene que ser procesado para diferentes tareas, compresión y almacenado, agregación e historización. Si tenemos una cola para realizar todas las tareas será dificil separar las responsabilidades del receptor, en aquellas que hemos definido en nuestra premisa. Sin embargo, si pudiéramos tener diferentes lectores para cada uno de los mensajes podríamos tener un Subscriptor para leer mensajes e historiarlos, otro Subscriptor para leer mensajes y agregarlos y otro Subscriptor más para comprimirlos y almacenarlos así conseguiríamos dividir las responsabilidades en partes simples y por lo tanto más mantenibles. Los topics en poco se diferencian de las colas, de hecho, su API es prácticamente idéntico y disponen casi de las mismas características, tamaños de cola, formateadores, detección de duplicados. A continuación veremos el código necesario para la creación y envió de un mensaje a un Topic.

 

 

Si se para y recuerda el trabajo con las colas observará como es prácticamente idéntico a lo que ya conocíamos de entradas anteriores, con la salvedad de que además de la creación del topic también se ha procedido a la creación de las diferentes subscripciones de las que hablábamos anteriormente.  Con respecto al envío de mensajes en este caso no hay nada particular ni diferente respecto al uso de colas.

 

El código para la recepción de mensajes en cada subscripción podría ser algo como lo siguiente:

 

 

Filtros

En los pasos anteriores hemos visto los elementos fundamentales del trabajo con los topics. Sin embargo no hemos hablado de una característica fundamental para los subscriptores que es la capacidad de filtrar los mensajes que quieren recibir. Por ejemplo, podríamos decidir que el subscriptor de agregación solamente recibiera aquellos mensajes con valores de señales que pudieran agregarse ( SUM,AVG, MAX … ) . Estos filtros, representados por la clase Filter, y más concretamente por SqlFilter, nos permiten “filtrar” en función de las propiedades de los mensajes y usuario. El nombre de SqlFilter viene dado por la posibilidad de utilizar SQL92 como norma para los filtros.

 

Con el fin de poner un ejemplo podremos ver el siguiente tip, donde se muestra la creación de un filtro para la subscripción y el envío de un mensaje con esta propiedad:

Bueno, hasta aquí hemos llegado, creo que no me dejo nada, si es así, hacérmelo saber…

 

Saludos

Unai

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *