Scénario : Envoi de messages de file d'attente à une fonction

Intégrer la file d'attente avec Functions à l'aide de Connector Hub.

Ce scénario implique la création d'une fonction, puis le référencement de cette fonction en tant que cible dans un connecteur (Hub de connecteurs) pour recevoir et traiter les messages provenant de files d'attente.

Envoi de messages de file d'attente à une fonction.

La charge utile reçue par la fonction contient uniquement les messages de la file d'attente.

Pour consulter un tutoriel connexe, reportez-vous à Utilisation d'OCI Functions et d'OCI Queue pour autoriser les fonctionnalités utilisateur sans exposer de privilège d'administration aux approbateurs.

Pour plus d'informations sur le dépannage, reportez-vous à la section Dépannage des connecteurs.

Stratégie IAM requise

Si vous êtes membre du groupe d'administrateurs, vous disposez déjà de l'accès requis pour exécuter ce scénario. Sinon, vous devez avoir accès à Functions .

Le workflow de création du connecteur inclut une stratégie par défaut lorsque nécessaire afin de fournir des droits d'accès en écriture au service cible. Si vous ne connaissez pas les stratégies, reportez-vous à Présentation des stratégies IAM.

Traitement des erreurs lors du traitement des files d'attente

Remarque

Dans le contexte des messages de file d'attente envoyés aux fonctions, les échecs partiels lors du traitement des messages dans un batch ne sont pas pris en charge.

Lorsqu'une fonction qui traite un lot de messages d'une file d'attente rencontre une erreur, tous les messages de ce lot sont de nouveau visibles dans la file d'attente, y compris les messages que la fonction a traités avec succès. Par conséquent, un message peut être traité par la fonction plusieurs fois. Comme pour toute cible, le connecteur continue de réessayer indéfiniment jusqu'à ce que la cible de la fonction réussisse. Pour plus d'informations, reportez-vous à Détails de livraison.

En cas d'échec lors du traitement d'un lot de messages, le nombre de messages distribués pour ces messages est toujours augmenté. Si le nombre de livraisons d'un message atteint le maximum défini au niveau de la file d'attente, le message est envoyé à la file d'attente des lettres mortes. Pour plus d'informations, reportez-vous à Nombre de distributions.

Pour empêcher le retraitement des messages, rendez votre fonction idempotente.

Configurer la file d'attente et la fonction

Avant de pouvoir créer le connecteur (Hub de connecteurs) , vous devez configurer une file d'attente et une fonction pour recevoir les données de la file d'attente.

Pour obtenir des instructions sur les files d'attente, reportez-vous à la rubrique Création d'une file d'attente.

Pour obtenir des instructions sur la fonction, reportez-vous aux sections suivantes :

    1. Sur la page de liste Connecteurs, sélectionnez Créer un connecteur. Si vous avez besoin d'aide pour trouver la page de liste, reportez-vous à Liste des connecteurs.
    2. Sur la page Créer un connecteur, entrez un nom convivial pour le nouveau connecteur et éventuellement une description. Evitez de saisir des informations confidentielles.
    3. Sélectionnez le compartiment dans lequel stocker le nouveau connecteur.
    4. Sous Configurer le connecteur, pour Source, sélectionnez File d'attente.
    5. Dans Cible, sélectionnez Fonctions.
    6. Sous Configurer la connexion source, sélectionnez la file d'attente contenant les messages souhaités :
      • Compartiment : sélectionnez le compartiment qui contient la file d'attente de votre choix.
      • File d'attente : sélectionnez la file d'attente qui contient les messages de votre choix.
        Remarque

        Pour sélectionner une file d'attente pour un connecteur, vous devez être autorisé à lire la file d'attente. Reportez-vous à Stratégies IAM (sécurisation de Connector Hub).
      • Filtre de canal (sous Filtrage des messages) (facultatif) : pour filtrer les messages des canaux de la file d'attente, entrez une valeur.

        Par exemple, pour filtrer les messages par ID de canal, entrez l'ID de canal.

        Pour connaître les valeurs prises en charge, reportez-vous à channelFilter à l'adresse GetMessages (API de file d'attente).

      Remarque

      Un message qui a été transféré vers la cible du connecteur est considéré comme "consommé". Pour répondre aux exigences du service de file d'attente, le connecteur supprime les messages transférés de la file d'attente source. Pour plus d'informations, reportez-vous à Utilisation des messages.
    7. Sous Configurer la cible, configurez la fonction vers laquelle envoyer les messages de la file d'attente.
      • Compartiment : sélectionnez le compartiment qui contient la fonction de votre choix.
      • Application de fonction : sélectionnez le nom de l'application de fonction contenant la fonction voulue.
      • Fonction : sélectionnez le nom de la fonction à laquelle envoyer les données.
      • Afficher les options supplémentaires : sélectionnez ce lien et indiquez des limites pour chaque batch de données envoyé à la fonction. Pour utiliser les paramètres manuels, indiquez des valeurs pour la limite de taille de batch (en Ko ou en nombre de messages) et la limite de temps de batch (en secondes).

        Par exemple, limitez la taille du lot en sélectionnant 5 000 kilo-octets ou 10 messages. Un exemple de limite de durée de batch est de 5 secondes.

      Remarques :

      • Le connecteur vide les données source sous forme de liste JSON dans des lots. La taille maximale du lot (ou de la charge utile) est de 6 Mo.
      • Les fonctions sont appelées de manière synchrone avec 6 Mo de données par appel. Si les données dépassent 6 Mo, le connecteur appelle à nouveau la fonction pour déplacer les données qui dépassent la limite. Ces appels sont traités séquentiellement.
      • Les fonctions peuvent s'exécuter pendant cinq minutes au maximum. Reportez-vous à la section Delivery Details.
      • Ne renvoyez pas les données des cibles Functions aux connecteurs. Connector Hub ne lit pas les données renvoyées par les cibles Functions. Si la fonction est renvoyée sans erreur, le connecteur traite les messages du lot comme "consommés" et supprime ces messages de la file d'attente.
    8. Accepter les stratégies par défaut : sélectionnez le lien Créer fourni pour chaque stratégie par défaut.
    9. Sélectionnez Créer.
    Le processus de création commence et sa progression s'affiche. Une fois l'opération terminée, la page de détails du connecteur s'ouvre.
    1. Définissez la source de file d'attente pour le connecteur : enregistrez un fichier nommé source.json.

      Exemple de contenu de fichier JSON pour la source de file d'attente :

      {
          "kind": "plugin",
          "pluginName": "QueueSource",
          "configMap": {
              "queueId": "<queue_OCID>"
          }
      }
    2. Définissez la cible Functions pour le connecteur : enregistrez un fichier nommé target.json.

      Exemple de contenu de fichier JSON pour la cible Functions :

      {
          "kind": "functions",
          "functionId": "<function_OCID>",
          "batchSizeInKbs": "5000",
          "batchSizeInNum": "10",
          "batchTimeInSec": "60"
        }
    3. Créez le connecteur à l'aide de la commande oci sch service-connector create.

      Exemple de commande, avec des lignes ajoutées pour l'analyse :

      oci sch service-connector create
        --compartment-id <compartment_OCID>
        --display-name "Queues to Functions"
        --source file://source.json
        --target file://target.json
  • Exécutez l'opération CreateServiceConnector pour créer le connecteur.

    Exemple de demande :

    POST /20200909/serviceConnectors
    Host: service-connector-hub.us-phoenix-1.oraclecloud.com
    <authorization and other headers>
    {
      "displayName": "My Queue to Function Connector",
      "compartmentId": "<compartment_OCID>",
      "description": "My connector description",
      "source": {
        "kind": "plugin",
        "pluginName": "QueueSource",
        "configMap": {
          "queueId": "<queue_OCID>"
        }
      },
      "target": {
        "kind": "functions",
        "functionId": "<function_OCID>",
        "batchSizeInKbs": "5000",
        "batchSizeInNum": "10",
        "batchTimeInSec": "60"
      }
    }

Vérifier que le nouveau connecteur déplace les données

Après avoir créé le connecteur, vérifiez qu'il déplace les données.

  • Activez les journaux pour que le connecteur obtienne des détails sur le flux de données.
  • Recherchez les résultats attendus au niveau du service cible.

La confirmation du déplacement des données vous permet d'éviter la désactivation automatique, qui se produit lorsqu'un connecteur tombe en panne pendant une longue période.