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

Intégrer la file d'attente aux fonctions à l'aide du centre de connecteurs.

Ce scénario consiste à créer une fonction, puis à référencer cette fonction en tant que cible dans un connecteur (Connector Hub) pour recevoir et traiter des messages à partir de files d'attente.

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

Les données utiles reçues par la fonction ne contiennent que des messages de la file d'attente.

Pour un tutoriel connexe, voir Utiliser le service des fonctions pour OCI et la file d'attente pour OCI pour autoriser les capacités d'utilisateur sans exposer le privilège d'administration aux approbateurs.

Pour obtenir de l'aide concernant le dépannage, voir Dépannage des connecteurs.

Politique GIA requise

Si vous êtes membre du groupe Administrateurs, vous avez déjà l'accès requis pour exécuter ce scénario. Sinon, vous devez accéder au service de fonctions .

Le flux de travail de création du connecteur inclut une politique par défaut, si nécessaire, afin de fournir l'autorisation d'écriture sur le service cible. Pour en savoir plus sur les politiques, voir Aperçu des politiques IAM.

Traitement des erreurs lors du traitement des files d'attente

Note

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

Lorsqu'une fonction qui traite un lot de messages à partir d'une file d'attente rencontre une erreur, tous les messages de ce lot redeviennent 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, voir Détails de la diffusion.

Si un échec se produit lors du traitement d'un lot de messages, le nombre de messages transmis est toujours augmenté. Si le nombre de messages transmis atteint le maximum défini au niveau de la file d'attente, le message est envoyé à la file d'attente des messages non distribués. Pour plus d'informations, voir Nombre de transmissions.

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

    1. Dans la page de liste Connecteurs, sélectionnez Créer un connecteur. Si vous avez besoin d'aide pour trouver la page de liste, voir Liste des connecteurs.
    2. Dans la page Créer un connecteur, entrez un nom convivial pour le nouveau connecteur et une description facultative. Évitez d'entrer des informations confidentielles.
    3. Sélectionnez le compartiment dans lequel vous voulez stocker le nouveau connecteur.
    4. Sous Configurer le connecteur, pour Source, sélectionnez File d'attente.
    5. Pour Cible, sélectionnez Fonctions.
    6. Sous Configurer la connexion source, sélectionnez la file d'attente qui contient les messages voulus :
      • Compartiment : Sélectionnez le compartiment qui contient la file d'attente voulue.
      • File d'attente : Sélectionnez la file d'attente qui contient les messages voulus.
        Note

        Pour sélectionner une file d'attente pour un connecteur, vous devez être autorisé à lire la file d'attente. Voir Politiques IAM (sécurisation du centre de connecteurs).
      • 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 canal, entrez l'ID canal.

        Pour les valeurs prises en charge, voir channelFilter à l'adresse GetMessages (API de file d'attente).

      Note

      Un message qui a été transféré à 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, voir Consommation de messages.
    7. Sous Configurer la cible, configurez la fonction pour envoyer les messages de la file d'attente.
      • Compartiment : Sélectionnez le compartiment qui contient la fonction voulue.
      • Application de fonction : Sélectionnez le nom de l'application de fonction qui contient la fonction souhaitée.
      • Fonction : Sélectionnez le nom de la fonction à laquelle vous voulez envoyer les données.
      • Afficher les options supplémentaires : Sélectionnez ce lien et spécifiez les limites pour chaque lot de données envoyé à la fonction. Pour utiliser des paramètres manuels, fournissez des valeurs pour la limite de taille de lot (Ko ou nombre de messages) et la limite de temps de lot (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 lot est de 5 secondes.

      Points à considérer :

      • Le connecteur vide les données sources en tant que liste JSON par lots. La taille maximale du lot ou des données utiles 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 de nouveau la fonction pour déplacer les données qui dépassent la limite. Ces appels sont traités séquentiellement.
      • Les fonctions peuvent être exécutées pendant un maximum de cinq minutes. Voir Détails de la diffusion.
      • Ne retournez pas de données des cibles des fonctions aux connecteurs. Le centre de connecteurs ne lit pas les données retournées depuis les cibles du service des fonctions. Si la fonction retourne avec succès sans erreur, le connecteur traite les messages du lot comme " consommés " et supprime ces messages de la file d'attente.
    8. Accepter les politiques par défaut : Sélectionnez le lien Créer fourni pour chaque politique par défaut.
    9. Sélectionnez Créer.
    Le processus de création commence et sa progression est affichée. À la fin, la page des détails du connecteur s'ouvre.
    1. Définissez la source de la 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 des fonctions 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 la numérisation :

      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"
      }
    }

Confirmer 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 le connecteur afin d'obtenir des détails sur le flux de données.
  • Vérifiez les résultats attendus pour le service cible.

La confirmation du déplacement des données vous permet d'éviter une désactivation automatique, qui se produit en cas de défaillance prolongée d'un connecteur.