Expansión de mensajes a muchos grupos de consumidores de una cola

Expanda los mensajes de una sola cola de OCI a muchos grupos de consumidores y aplique filtros para cada grupo, lo que permite mensajes escalables, de baja latencia y basados en la aplicación de aplicación a aplicación

Con fanout, puedes enviar un mensaje a diferentes grupos de consumidores al mismo tiempo, lo que facilita compartir actualizaciones con muchos equipos o servicios desde una sola cola. Esto es útil porque puedes controlar exactamente quién recibe qué mensajes, por lo que cada grupo solo ve lo que es relevante para ellos.

Para utilizar fanout, cree filtros que evalúen los atributos de mensaje adjuntos a cada mensaje. Solo los grupos de consumidores para los que el filtro se evalúa como true reciben el mensaje.

Grupos de Consumidores

Un grupo de consumidores es una ruta de entrega lógica y persistente dentro de una cola. Cada grupo de consumidores recibe mensajes por separado, en función de los filtros que defina.
Nota

Debe activar los grupos de consumidores para poder utilizarlos en una cola. Puede hacerlo cuando cree o edite una cola.
Cuando se activan grupos de consumidores para una cola, el servicio de cola crea automáticamente un grupo por defecto denominado grupo de consumidores principal. Si bien no puede agregar filtros al grupo por defecto ni suprimirlo, puede desactivarlo si es necesario. Puede considerar este grupo como un superjuego: siempre que esté activado, recibirá todos los mensajes publicados en la cola, independientemente de los filtros definidos para otros grupos.
Nota

El grupo principal garantiza que cada mensaje tenga un destino. Cuando define el grupo de consumidores principal como inactivo, no recibe mensajes a través de él. El sistema borra los mensajes enviados mientras el grupo principal está inactivo y que no coinciden con los filtros de otros grupos; estos mensajes no se pueden recuperar. Para evitar la pérdida de mensajes, mantenga activado el grupo de consumidores principal a menos que desee descartar específicamente algunos mensajes.

Además del grupo de consumidores por defecto, puede agregar tantos grupos de consumidores como necesite para entregar mensajes a consumidores específicos. Cada grupo opera independientemente de los demás, por lo que los mensajes se entregan, filtran y rastrean por separado, lo que garantiza el aislamiento y la equidad entre los consumidores. Puede definir un filtro para cada grupo para controlar los mensajes que recibe. Si no define un filtro o deja el filtro vacío, el grupo recibe todos los mensajes, al igual que con el grupo predeterminado.

A continuación, se muestra un resumen de las diferencias entre el grupo de consumidores por defecto (principal) y los grupos de consumidores que crea:

Función Grupo de Consumidores por Defecto (Principal) Otros grupos de consumidores
Cómo se creó Se crean automáticamente cuando se activan los grupos de consumidores Creado manualmente según sea necesario
Se pueden suprimir No
Se puede desactivar
Pueden tener filtros No
Recibe todos los mensajes Sí, si está activado Solo los mensajes que coincidan con su filtro o todos los mensajes si no se define ningún filtro
Se puede definir el recuento de entregas de DLQ No
OCID Igual que el OCID de cola OCID único por grupo

Ejemplo de uso

Supongamos que crea una cola para eventos de facturación. El grupo de consumidores por defecto es para el equipo de conformidad de facturación, que necesita recibir todos los mensajes por motivos de conformidad. También puede agregar otro grupo de consumidores para el equipo que gestiona los gastos ejecutivos y definir un filtro para que este grupo solo reciba mensajes con el atributo team = "exec-expenses". Esto reduce el ruido para el equipo de gastos ejecutivos al garantizar que solo reciban mensajes relevantes.

Mensajes y atributos

Un mensaje puede incluir opcionalmente atributos, pares clave-valor agregados por el productor como información adicional (metadatos). Los atributos pueden describir cualquier detalle sobre el mensaje (como región, prioridad o tipo de evento) y ayudarle a realizar un filtrado detallado y direccionamiento de mensajes a grupos de consumidores.

A continuación, se muestran algunas directrices para los productores al crear atributos:

  • Las Claves y los Valores de Atributo son Sensibles a Mayúsculas/Minúsculas.
  • Los valores de atributo deben ser uno de los siguientes tipos de dato soportados:
    • Cadena: una cadena codificada UTF-8.
    • Número: un valor numérico entero o decimal.
  • Los atributos se cuentan para el tamaño total del mensaje.
A continuación, se muestran algunos consejos para asignar un nombre a las claves de atributo:
  • Las claves de atributo deben comenzar con una letra o guión bajo (_).
  • Las claves de atributo solo pueden incluir letras, números, guiones (-) o guiones bajos (_).
  • No utilices comillas alrededor de las teclas.

Filtrado

Utilice filtros para controlar los mensajes que recibe un grupo de consumidores. Cuando se publica un mensaje, el servicio de cola comprueba el filtro con los atributos de cada mensaje para decidir si el mensaje se debe entregar a ese grupo de consumidores. Un mensaje se entrega a un grupo de consumidores solo si su filtro coincide con los atributos
Nota

Los filtros solo funcionan con los atributos del mensaje, no con el cuerpo del mensaje.

Los filtros se crean al crear un grupo de consumidores. Cada grupo de consumidores puede tener su propio filtro y puede crear un filtro por grupo de consumidores.

Una expresión de filtro es una regla similar a SQL que escribe para decidir qué mensajes obtiene un grupo.

Filtrar restricciones de expresión

A continuación, se muestran las reglas que definen cómo escribir y utilizar expresiones de filtro, para que los filtros funcionen de la forma que desee:
  • Las expresiones de filtro son sensibles a mayúsculas/minúsculas. Por ejemplo, :region = "us-ashburn-1" es diferente de :region = "US-ASHBURN-1".
  • Las expresiones de filtro pueden tener hasta 256 caracteres.

Filtrar evaluación

Esto es lo que sucede cuando el servicio OCI Queue comprueba los filtros y lo que sucede con los mensajes que no coinciden con ningún filtro:
  • El servicio de cola comprueba los filtros solo cuando se publica por primera vez un mensaje en la cola.
  • El servicio de cola comprueba los filtros solo cuando se publica por primera vez un mensaje en la cola. Si más adelante vuelve a activar un grupo de consumidores o cambia su filtro, los mensajes existentes en la cola no se evalúan retroactivamente. Solo los mensajes nuevos se comprueban con el filtro actualizado.
  • Si ningún filtro del grupo de consumidores coincide con un mensaje y el grupo principal está desactivado, el mensaje se borra y no se puede recuperar. La cola emite una métrica cada vez que se borra un mensaje. Puede ver esta métrica en la consola de Queue Service o en la supervisión de OCI.

Modelo de expresiones de filtro

Estos son los tipos de expresiones de filtro que puede utilizar:

Presencia clave

Utilice filtros de presencia clave para comprobar si un mensaje incluye o falta un atributo determinado.

A continuación, se muestran algunas expresiones de filtro de ejemplo:

  • :region: coincide con los mensajes que tienen el atributo region definido, independientemente de su valor.
  • NOT :region: coincide con los mensajes que no tienen el atributo region.

Filtros de cadena

Utilice filtros de cadena para hacer coincidir los mensajes en función del valor de un atributo de texto. Puede comprobar si hay coincidencias, diferencias o patrones exactos en el texto.

A continuación, se muestran algunas expresiones de filtro de ejemplo:

  • :name = "Bob": coincide con los mensajes en los que el atributo name es exactamente 'Bob'.
  • :name != "Bob": coincide con los mensajes en los que el atributo name no es 'Bob'.
  • hasPrefix(:name, "Bo"): coincide con los mensajes en los que el atributo name empieza por 'Bo'.
  • hasSuffix(:name, "ob"): coincide con los mensajes en los que el atributo name termina con 'ob'.
  • NOT hasPrefix(:name, "Bo"): coincide con los mensajes en los que el atributo name no empieza por 'Bo'.

Filtros de número

Utilice filtros numéricos para hacer coincidir los mensajes en función del valor de un atributo numérico.

A continuación se muestran algunos ejemplos:

  • :age = 40: coincide con los mensajes donde el atributo age es exactamente 40.
  • :age != 40: coincide con mensajes en los que el atributo age no es 40.
  • :age > 40: coincide con los mensajes en los que el atributo age es mayor que 40.
  • :age >= 40: coincide con mensajes en los que el atributo age es mayor o igual que 40.
  • :age < 40: coincide con los mensajes en los que el atributo age es menor que 40.
  • :age <= 40: coincide con mensajes en los que el atributo age es menor o igual que 40.

Filtros lógicos

Utilice operadores lógicos para combinar reglas y crear filtros más flexibles. Los operadores soportados son AND, OR y NOT.
Nota

La prioridad del operador es la siguiente: los paréntesis ( ) tienen la prioridad más alta, seguidos de NOT, AND y, a continuación, OR.

A continuación se muestran algunos ejemplos:

  • :name = "Bob" AND :age = 40: coincide con los mensajes en los que el atributo name es "Bob" y age es 40.
  • :name = "Bob" OR :age = 40: coincide con los mensajes donde el atributo name es "Bob" o age es 40.
  • :name = "Bob" AND NOT :age: coincide con mensajes en los que el atributo name es 'Bob' y no hay ningún atributo age.

Filtros complejos

Utilice una lógica más compleja combinando varios filtros con paréntesis y varios operadores lógicos.
Nota

La prioridad del operador es la siguiente: los paréntesis ( ) tienen la prioridad más alta, seguidos de NOT, AND y, a continuación, OR.

Un ejemplo sería:

  • :name = "Bob" AND NOT (:age > 40 OR :location = "Chicago"): coincide con los mensajes en los que el atributo name es "Bob" y age no es superior a 40 o location no es "Chicago".

políticas de IAM

Revise las políticas de IAM necesarias para trabajar con grupos de consumidores y fanout.

Instrucciones Óptimas

  • Comience con pequeños filtros para comprobar que la entrega de mensajes funciona como se esperaba. Agregue lógica de filtro compleja lentamente, probando a medida que avanza.
  • Supervise la métrica de mensajes borrados en OCI Monitoring. Esto le ayuda a capturar los mensajes que se han borrado porque no hay ningún filtro coincidente.
  • Utilice una nomenclatura coherente para los atributos de mensaje de todos los productores. Esto hace que escribir y mantener filtros sea más fácil y confiable.
  • Si una clave de atributo no sigue las reglas [empezando por una letra o un guion bajo (_), incluya solo letras, números, guiones (-) o guiones bajos (_)], agregue comillas alrededor de ella en la expresión de filtro.