Colas, temas y suscripciones de Service Bus

Completado

Las entidades de mensajería que forman el núcleo de las funcionalidades de mensajería de Service Bus son las colas, los temas y suscripciones y las reglas o acciones.

Colas

Las colas ofrecen una entrega de mensajes según el modelo primero en entrar, primero en salir (FIFO [PEPS]) a uno o más destinatarios de la competencia. Es decir, los receptores normalmente reciben y procesan los mensajes en el orden en el que se agregaron a la cola. Además, solo un destinatario de mensaje recibe y procesa cada uno de los mensajes. Puesto que los mensajes se almacenan de forma duradera en la cola, los productores (remitentes) y los consumidores (receptores) no tienen que procesar los mensajes de forma simultánea.

Una ventaja relacionada es la nivelación de la carga, lo que permite a los productores y consumidores enviar y recibir mensajes con distintas velocidades. En muchas aplicaciones, la carga del sistema varía con el tiempo. Sin embargo, el tiempo de procesamiento necesario para cada unidad de trabajo suele ser constante. La intermediación de productores y consumidores de mensajes con una cola implica que la aplicación consumidora solo necesita la capacidad de administrar una carga promedio, en lugar de una carga de mucha actividad.

El uso de colas para intermediar entre los consumidores y productores de mensajes proporciona un acoplamiento no estricto inherente entre los componentes. Dado que los productores y consumidores no están relacionados entre sí, un consumidor puede actualizarse sin tener ningún efecto en el productor.

Puede crear colas mediante Azure Portal, PowerShell, la CLI o plantillas de Resource Manager. Luego envíe y reciba mensajes mediante clientes escritos en C#, Java, Python y JavaScript.

Modos de recepción

Puede especificar dos modos diferentes en los que Service Bus recibe los mensajes: recibir y eliminar o bloqueo de inspección.

Recibir y eliminar

En este modo, cuando Service Bus recibe la solicitud del consumidor, marca el mensaje como consumido y lo devuelve a la aplicación del consumidor. Este modo es el modelo más sencillo. Funciona mejor para los escenarios en los que la aplicación puede tolerar no procesar un mensaje en caso de error. Por ejemplo, pongamos una situación en la que un consumidor emite una solicitud de recepción que se bloquea antes de procesarla. Cuando Service Bus marca el mensaje como consumido, la aplicación comienza a consumir mensajes al reiniciarse. Se omite el mensaje que se consumió antes del bloqueo.

Inspección y bloqueo

En este modo, la operación de recepción se convierte en una operación de dos fases que hace posible admitir aplicaciones que no toleran la pérdida de mensajes.

  1. Busca el siguiente mensaje que se va a consumir, lo bloquea para impedir que otros consumidores lo reciban y, a continuación, lo devuelve a la aplicación.

  2. Una vez que la aplicación termina de procesar el mensaje, solicita al servicio Service Bus que complete la segunda fase del proceso de recepción. A continuación, el servicio marca el mensaje como consumido.

Si la aplicación no puede procesar el mensaje por alguna razón, puede solicitar al servicio Service Bus que abandone el mensaje. Service Bus desbloquea el mensaje y hace que esté disponible para que el mismo consumidor u otro vuelvan a recibirlo. En segundo lugar, hay un tiempo de espera asociado con el bloqueo. Si la aplicación no puede procesar el mensaje antes de que finalice el tiempo de espera de bloqueo, Service Bus desbloquea el mensaje y hace que esté disponible para que pueda volver a recibirse.

Temas y suscripciones

Una cola permite que un único consumidor procese un mensaje. En comparación con las colas, los temas y suscripciones proporcionan una vía de comunicación uno a varios en un patrón de publicación y suscripción. Resulta útil para escalar a un gran número de destinatarios. Cada mensaje publicado se pone a disposición de todas las suscripciones registradas en el tema. El publicador envía un mensaje a un tema y uno o varios suscriptores reciben una copia del mensaje, en función de las reglas de filtro establecidas en las suscripciones. Las suscripciones pueden usar más filtros para restringir los mensajes que quieren recibir.

Los publicadores envían mensajes a un tema de la misma manera en que envían mensajes a una cola. No obstante, los consumidores no reciben mensajes directamente del tema. En su lugar, los reciben de las suscripciones del tema. Una suscripción al tema se parece a una cola virtual en que recibe copias de los mensajes que se envían al tema. Los consumidores reciben los mensajes de una suscripción exactamente de la misma manera en que se reciben de una cola.

La creación de un tema es similar a la creación de una cola, como se describe en la sección anterior. Puede crear temas y suscripciones mediante Azure Portal, PowerShell, la CLI o plantillas de Resource Manager. Luego envíe mensajes a un tema y recíbalos de suscripciones mediante clientes escritos en C#, Java, Python y JavaScript.

Reglas y acciones

En muchos escenarios, los mensajes que tienen características específicas deben procesarse de maneras diferentes. Para permitir este procesamiento, puede configurar suscripciones para buscar los mensajes que tengan las propiedades deseadas y, después, realizar determinadas modificaciones en dichas propiedades. Mientras que las suscripciones del Service Bus ven todos los mensajes enviados al tema, solo se puede copiar un subconjunto de dichos mensajes en la cola de suscripción virtual. Este filtrado se consigue mediante los filtros de suscripción. Dichas modificaciones se denominan acciones de filtrado. Cuando se cree una suscripción, podrá proporcionar una expresión de filtro que opere en las propiedades del mensaje. Las propiedades pueden ser del sistema (por ejemplo, etiqueta) y propiedades de la aplicación personalizadas (por ejemplo, StoreName). En este caso, la expresión de filtro SQL es opcional. Sin una expresión de filtro SQL, todas las acciones de filtro definidas en una suscripción se realizan en todos los mensajes de dicha suscripción.