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
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 | Sí |
| Se puede desactivar | Sí | Sí |
| Pueden tener filtros | No | Sí |
| 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 | Sí |
| 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.
- 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
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
- 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
- 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 atributoregiondefinido, independientemente de su valor.NOT :region: coincide con los mensajes que no tienen el atributoregion.
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 atributonamees exactamente 'Bob'.:name != "Bob": coincide con los mensajes en los que el atributonameno es 'Bob'.hasPrefix(:name, "Bo"): coincide con los mensajes en los que el atributonameempieza por 'Bo'.hasSuffix(:name, "ob"): coincide con los mensajes en los que el atributonametermina con 'ob'.NOT hasPrefix(:name, "Bo"): coincide con los mensajes en los que el atributonameno 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 atributoagees exactamente 40.:age != 40: coincide con mensajes en los que el atributoageno es 40.:age > 40: coincide con los mensajes en los que el atributoagees mayor que 40.:age >= 40: coincide con mensajes en los que el atributoagees mayor o igual que 40.:age < 40: coincide con los mensajes en los que el atributoagees menor que 40.:age <= 40: coincide con mensajes en los que el atributoagees menor o igual que 40.
Filtros lógicos
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 atributonamees "Bob" yagees 40.:name = "Bob" OR :age = 40: coincide con los mensajes donde el atributonamees "Bob" oagees 40.:name = "Bob" AND NOT :age: coincide con mensajes en los que el atributonamees 'Bob' y no hay ningún atributoage.
Filtros complejos
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 atributonamees "Bob" yageno es superior a 40 olocationno 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.