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
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.
- 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
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
- 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
- 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'attributregionest défini, quelle que soit sa valeur.NOT :region: Correspond aux messages qui n'ont pas l'attributregion.
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'attributnameest exactement 'Bob'.:name != "Bob": Correspond aux messages pour lesquels l'attributnamen'est pas 'Bob'.hasPrefix(:name, "Bo"): Correspond aux messages pour lesquels l'attributnamecommence par 'Bo'.hasSuffix(:name, "ob"): Correspond aux messages pour lesquels l'attributnamese termine par 'ob'.NOT hasPrefix(:name, "Bo"): Correspond aux messages pour lesquels l'attributnamene 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'attributageest exactement 40.:age != 40: Correspond aux messages dont l'attributagen'est pas 40.:age > 40: Correspond aux messages dont l'attributageest supérieur à 40.:age >= 40: Correspond aux messages dont l'attributageest supérieur ou égal à 40.:age < 40: Correspond aux messages dont l'attributageest inférieur à 40.:age <= 40: Correspond aux messages dont l'attributageest inférieur ou égal à 40.
Filtres logiques
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'attributnameest "Bob" etageest 40.:name = "Bob" OR :age = 40: Correspond aux messages dont l'attributnameest "Bob" ouageest 40.:name = "Bob" AND NOT :age: Correspond aux messages où l'attributnameest 'Bob' et où il n'y a aucun attributage.
Filtres complexes
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'attributnameest "Bob" etagen'est pas supérieur à 40 oulocationn'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.