Envoyer des messages à de nombreux groupes de consommateurs de ressources dans une file d'attente

Élargissez les messages d'une seule file d'attente OCI à de nombreux groupes de consommateurs et appliquez des filtres pour chaque groupe, ce qui permet une messagerie d'application à application évolutive, à faible latence et basée sur l'extraction.

Avec fanout, vous pouvez envoyer un message à différents groupes de consommateurs en même temps, ce qui facilite le partage des mises à jour avec de nombreuses équipes ou services à partir d'une seule file d'attente. Cela est utile parce que vous pouvez contrôler exactement qui reçoit quels messages, de sorte que chaque groupe ne voit que ce qui est pertinent pour eux.

Pour utiliser le ventilateur, vous créez des filtres qui évaluent les attributs de message associés à chaque message. Seuls les groupes de consommateurs pour lesquels le filtre donne la valeur true reçoivent le message.

Groupes de consommateurs

Un groupe de consommateurs est un chemin de diffusion logique persistant dans une file d'attente. Chaque groupe de consommateurs reçoit les messages séparément, en fonction des filtres que vous avez définis.
Note

Vous devez activer les groupes de consommateurs de ressources avant de pouvoir les utiliser dans une file d'attente. Vous pouvez le faire lorsque vous créez ou modifiez une file d'attente.
Lorsque vous activez des groupes de consommateurs de ressources pour une file d'attente, le service de file d'attente crée automatiquement un groupe par défaut appelé groupe de consommateurs de ressources principal. Bien que vous ne puissiez pas ajouter de filtres au groupe par défaut ou le supprimer, vous pouvez le désactiver si nécessaire. Vous pouvez considérer ce groupe comme un surensemble : tant qu'il est activé, il reçoit tous les messages publiés dans la file d'attente, quels que soient les filtres définis pour les autres groupes.
Note

Le groupe principal garantit que chaque message a une destination. Lorsque vous réglez le groupe de consommateurs principal à Inactif, vous ne recevez pas de messages. Le système supprime tous les messages envoyés alors que le groupe principal est inactif et qui ne correspondent pas aux filtres d'autres groupes; ces messages ne peuvent pas être récupérés. Pour éviter de perdre des messages, gardez le groupe de consommateurs de ressources principal activé, sauf si vous avez spécifiquement l'intention d'abandonner certains messages.

En plus du groupe de consommateurs par défaut, vous pouvez ajouter autant de groupes de consommateurs que nécessaire pour transmettre des messages à des consommateurs particuliers. Chaque groupe fonctionne indépendamment des autres, de sorte que les messages sont livrés, filtrés et suivis séparément, assurant ainsi l'isolement et l'équité entre les consommateurs. Vous pouvez définir un filtre pour chaque groupe afin de contrôler les messages qu'il reçoit. Si vous ne définissez pas de filtre ou ne le laissez pas vide, le groupe reçoit tous les messages, comme pour le groupe par défaut.

Voici un aperçu des différences entre le groupe de consommateurs de ressources par défaut (principal) et les groupes de consommateurs de ressources que vous créez :

Fonction Groupe de consommateurs par défaut (principal) Autres groupes de consommateurs
Comment créer Créé automatiquement lorsque les groupes de consommateurs sont activés Créé manuellement selon les besoins
Peut être supprimé Nombre Oui
Peut être désactivé Oui Oui
Peut comporter des filtres Nombre Oui
Reçoit tous les messages Oui, si activé Seuls les messages correspondant à son filtre ou tous les messages si aucun filtre n'est défini
Le nombre de livraisons DLQ peut être défini Nombre Oui
OCID Identique à l'OCID de la file d'attente OCID unique par groupe

Exemple d'utilisation

Supposons que vous créiez une file d'attente pour les événements de facturation. Le groupe de consommateurs par défaut est destiné à l'équipe de conformité de la facturation, qui doit recevoir tous les messages pour des raisons de conformité. Vous ajoutez également un autre groupe de consommateurs pour l'équipe qui gère les frais de direction et définissez un filtre pour que ce groupe ne reçoive que les messages ayant l'attribut team = "exec-expenses". Cela réduit le bruit pour l'équipe de gestion des dépenses en s'assurant qu'elle ne reçoit que des messages pertinents.

Messages et attributs

Un message peut éventuellement inclure des attributs, des paires clé-valeur ajoutées par le fournisseur de portlets en tant qu'informations supplémentaires (métadonnées). Les attributs peuvent décrire n'importe quel détail du message (par exemple, la région, la priorité ou le type d'événement) et vous aider à effectuer un filtrage détaillé et un ciblage des messages vers les groupes de consommateurs de ressources.

Voici quelques directives pour les producteurs lors de la création d'attributs :

  • Les clés et les valeurs d'attribut sont sensibles à la casse.
  • Les valeurs d'attribut doivent être l'un des types de données pris en charge suivants :
    • Chaîne : chaîne encodée en UTF-8.
    • Nombre : Valeur numérique entière ou décimale.
  • Les attributs sont pris en compte dans la taille totale du message.
Voici quelques conseils pour nommer des clés d'attribut :
  • Les clés d'attribut doivent commencer par une lettre ou un trait de soulignement (_).
  • Les clés d'attribut peuvent uniquement inclure des lettres, des chiffres, des tirets (-) ou des traits de soulignement (_).
  • N'utilisez pas de guillemets autour des clés.

Filtrage

Utilisez des filtres pour contrôler les messages reçus par un groupe de consommateurs. Lorsqu'un message est publié, le service de file d'attente vérifie le filtre par rapport aux attributs de chaque message pour déterminer si le message doit être transmis à ce groupe de consommateurs de ressources. Un message est transmis à un groupe de consommateurs de ressources uniquement si son filtre correspond aux attributs
Note

Les filtres fonctionnent uniquement avec les attributs de message et non avec le corps du message.

Vous créez des filtres lorsque vous créez un groupe de consommateurs de ressources. Chaque groupe de consommateurs peut avoir son propre filtre et vous pouvez en créer un par groupe.

Une expression de filtre est une règle de type SQL que vous écrivez pour déterminer les messages qu'un groupe reçoit.

Filtrer les contraintes d'expression

Voici les règles qui définissent la façon dont vous écrivez et utilisez les expressions de filtre, de sorte que les filtres fonctionnent comme vous le souhaitez :
  • Les expressions de filtre sont sensibles à la casse. Par exemple, :region = "us-ashburn-1" est différent de :region = "US-ASHBURN-1".
  • Les expressions de filtre peuvent comporter jusqu'à 256 caractères.

Filtrer l'évaluation

Voici ce qui se passe lorsque le service de file d'attente OCI vérifie les filtres et ce qui arrive aux messages qui ne correspondent à aucun filtre :
  • Le service de file d'attente vérifie les filtres uniquement lorsqu'un message est publié pour la première fois dans la file d'attente.
  • Le service de file d'attente vérifie les filtres uniquement lorsqu'un message est publié pour la première fois dans la file d'attente. Si vous réactivez ultérieurement un groupe de consommateurs de ressources ou modifiez son filtre, les messages existants dans la file d'attente ne sont pas évalués rétroactivement. Seuls les nouveaux messages sont vérifiés par rapport au filtre mis à jour.
  • Si aucun filtre de groupe de consommateurs ne correspond à un message et que le groupe principal est désactivé, le message est supprimé et ne peut pas être extrait. La file d'attente émet une mesure chaque fois qu'un message est supprimé. Vous pouvez voir cette mesure dans la console dans le service de file d'attente ou dans le service de surveillance pour OCI.

Modèle d'expressions de filtre

Voici les types d'expression de filtre que vous pouvez utiliser :

Présence clé

Utilisez des filtres de présence de clé pour vérifier si un message inclut ou manque un attribut spécifique.

Voici quelques exemples d'expressions de filtre :

  • :region : Correspond aux messages pour lesquels l'attribut region est défini, quelle que soit sa valeur.
  • NOT :region : Correspond aux messages qui n'ont pas l'attribut region.

Filtres de chaîne

Utilisez des filtres de chaîne pour mettre en correspondance les messages en fonction de la valeur d'un attribut de texte. Vous pouvez rechercher des correspondances exactes, des différences ou des motifs dans le texte.

Voici quelques exemples d'expressions de filtre :

  • :name = "Bob" : Correspond aux messages dont l'attribut name est exactement 'Bob'.
  • :name != "Bob" : Correspond aux messages pour lesquels l'attribut name n'est pas 'Bob'.
  • hasPrefix(:name, "Bo") : Correspond aux messages pour lesquels l'attribut name commence par 'Bo'.
  • hasSuffix(:name, "ob") : Correspond aux messages pour lesquels l'attribut name se termine par 'ob'.
  • NOT hasPrefix(:name, "Bo") : Correspond aux messages pour lesquels l'attribut name ne commence pas par 'Bo'.

Filtres de nombre

Utilisez des filtres numériques pour mettre en correspondance les messages en fonction de la valeur d'un attribut numérique.

Voici quelques exemples :

  • :age = 40 : Correspond aux messages dont l'attribut age est exactement 40.
  • :age != 40 : Correspond aux messages dont l'attribut age n'est pas 40.
  • :age > 40 : Correspond aux messages dont l'attribut age est supérieur à 40.
  • :age >= 40 : Correspond aux messages dont l'attribut age est supérieur ou égal à 40.
  • :age < 40 : Correspond aux messages dont l'attribut age est inférieur à 40.
  • :age <= 40 : Correspond aux messages dont l'attribut age est inférieur ou égal à 40.

Filtres logiques

Utilisez des opérateurs logiques pour combiner des règles et créer des filtres plus flexibles. Les opérateurs pris en charge sont AND, OR et NOT.
Note

La priorité de l'opérateur est la suivante : les parenthèses ( ) ont la priorité la plus élevée, suivies de NOT, puis AND, puis OR.

Voici quelques exemples :

  • :name = "Bob" AND :age = 40 : Correspond aux messages dont l'attribut name est "Bob" et age est 40.
  • :name = "Bob" OR :age = 40 : Correspond aux messages dont l'attribut name est "Bob" ou age est 40.
  • :name = "Bob" AND NOT :age : Correspond aux messages où l'attribut name est 'Bob' et où il n'y a aucun attribut age.

Filtres complexes

Utilisez une logique plus complexe en combinant plusieurs filtres avec des parenthèses et plusieurs opérateurs logiques.
Note

La priorité de l'opérateur est la suivante : les parenthèses ( ) ont la priorité la plus élevée, suivies de NOT, puis AND, puis OR.

Voici un exemple :

  • :name = "Bob" AND NOT (:age > 40 OR :location = "Chicago") : Correspond aux messages pour lesquels l'attribut name est "Bob" et age n'est pas supérieur à 40 ou location n'est pas "Chicago".

Politiques GIA

Consultez les politiques IAM requises pour utiliser les modules d'extension et les groupes de consommateurs.

Meilleures pratiques

  • Commencez par de petits filtres pour vérifier que la transmission des messages fonctionne comme prévu. Ajoutez lentement une logique de filtre complexe, en effectuant des tests au fur et à mesure.
  • Surveillez la mesure des messages abandonnés dans le service de surveillance OCI. Cela vous aide à détecter les messages qui ont été abandonnés, car aucun filtre ne correspond.
  • Utiliser un nom cohérent pour les attributs de message de tous les fournisseurs de portlets. Cela rend l'écriture et la maintenance des filtres plus faciles et plus fiables.
  • Si une clé d'attribut ne respecte pas les règles [en commençant par une lettre ou un trait de soulignement (_), n'incluez que des lettres, des chiffres, des traits d'union (-) ou des traits de soulignement (_)], ajoutez-y des guillemets dans l'expression de filtre.