IMM prend en charge diverses opérations de sortie de données. Certaines d'entre elles sont longues et ne peuvent pas renvoyer de résultats dans le cadre d'une seule requête synchrone. Pour gérer ces cas, IMM propose des opérations d'API asynchrones, généralement nommées selon le format CreateXXXTask, ainsi qu'un mécanisme de notification pour récupérer les résultats.
Les opérations d'API asynchrones d'IMM sont conçues pour les travaux de longue durée qui ne peuvent pas renvoyer de résultats dans une seule requête synchrone. Cette approche asynchrone évite le blocage du client, améliore les performances du système et exécute les travaux gourmands en ressources ou planifiés en arrière-plan sans affecter l'expérience utilisateur.
Fonctionnement
Téléchargez vos données source vers Alibaba Cloud Object Storage Service (OSS).
Appelez une opération d'API IMM, telle que
CreateXXXTask, pour initier une tâche asynchrone.IMM récupère et traite les données source à partir de l'URI OSS spécifié.
IMM écrit les résultats du traitement dans l'URI OSS spécifié.
Une fois la tâche terminée, IMM envoie l'état de la tâche à votre rubrique MNS ou ApsaraMQ for RocketMQ spécifiée.
MNS ou ApsaraMQ for RocketMQ pousse ensuite le message de notification vers votre application ou service.
Entrée et sortie de tâche
-
Les paramètres des données d'entrée sont généralement préfixés par
Source. Les paramètres suivants sont disponibles :SourceURI: l'emplacement des données d'entrée. Seuls les URI OSS sont pris en charge.Sources: un tableau contenant plusieurs URI d'entrée.Source: un objet contenant plusieurs URI d'entrée.
-
Les paramètres des données de sortie sont généralement préfixés par
Target. Les paramètres suivants sont disponibles :TargetURI: la destination de la sortie. Ce paramètre prend en charge la syntaxe de modèle.TargetURIPrefix: le préfixe de l'URI de destination de sortie.Target: un objet contenant plusieurs URI de sortie.
Les données d'entrée et de sortie doivent se trouver dans la même région que le service IMM.
URI OSS
Un URI OSS identifie de manière unique une ressource dans OSS et utilise le format oss://<bucket>/<object>, par exemple oss://test-bucket/test-object/test.docx.
<bucket> correspond au nom d'un compartiment OSS situé dans la même région que votre projet. <object> représente le chemin d'accès complet au fichier, y compris son extension.
Les formats invalides courants incluent :
http://bucket.oss-cn-hangzhou.aliyuncs.com/test-object/test.docxoss://bucket.oss-cn-hangzhou.aliyuncs.com/test-object/test.docx
Modèle TargetURI
Un modèle TargetURI vous permet d'utiliser des espaces réservés dans un URI. Ces espaces réservés sont remplacés par des valeurs réelles lors de l'exécution pour générer dynamiquement l'URI de sortie final. Par exemple : oss://{bucket}/{tags.custom}/{dirname}/{barename}.{autoext}.
Pour plus d'informations, consultez la section Modèle TargetURI.
Autorisation
Pour une tâche asynchrone, vous devez accorder à IMM les permissions de lire les données d'entrée et d'écrire les données de sortie aux emplacements que vous fournissez. Ces permissions sont déterminées par le paramètre Project Name de votre requête, qui identifie le projet et son rôle lié au service associé. Vous spécifiez ce rôle pour le projet à l'aide du paramètre Service Role dans l'opération d'API Créer un projet. Par défaut, le rôle AliyunIMMDefaultRole est utilisé ; il est créé automatiquement lorsque vous activez le service. Pendant le traitement de la tâche, IMM endosse ce rôle pour accéder à vos données.
Obtenir l'état de la tâche
Utilisation de MNS ou d'ApsaraMQ for RocketMQ
Comme décrit dans la section Fonctionnement, vous pouvez configurer MNS ou ApsaraMQ for RocketMQ pour recevoir les notifications d'état des tâches IMM. Il s'agit de la méthode recommandée. Pour plus de détails sur le format de notification, consultez la section Format des messages de notification asynchrone.
MNS ou ApsaraMQ for RocketMQ doit se trouver dans la même région que IMM.
-
(Recommandé) Utilisez le paramètre
Notificationpour spécifier la configuration MNS ou ApsaraMQ for RocketMQ pour les notifications asynchrones.-
MNS : utilisez le champ
MNSdans le paramètreNotificationpour spécifier le endpoint et la rubrique MNS.{ "Notification": { "MNS": { "Endpoint": "The MNS endpoint", "TopicName": "The MNS topic" } } } -
ApsaraMQ for RocketMQ : utilisez le champ
RocketMQdans le paramètreNotificationpour spécifier le endpoint, la rubrique et l'ID d'instance d'ApsaraMQ for RocketMQ.{ "Notification": { "RocketMQ": { "Endpoint": "The ApsaraMQ for RocketMQ endpoint", "TopicName": "The ApsaraMQ for RocketMQ topic", "InstanceId": "The ApsaraMQ for RocketMQ instance ID" } } }
-
-
Utilisez les paramètres
NotifyEndpointetNotifyTopicNamepour spécifier le endpoint et la rubrique MNS afin de recevoir les notifications de messages asynchrones.NotifyEndpoint: le endpoint MNS pour recevoir les notifications. Par défaut, il s'agit du endpoint MNS de l'appelant.NotifyTopicName: le nom de la rubrique MNS. Si ce paramètre est laissé vide, aucune notification n'est envoyée.
Utilisation de l'API GetTask
IMM fournit également l'opération d'API GetTask pour interroger l'état d'une tâche.
Bien que vous puissiez appeler à plusieurs reprises l'opération d'API GetTask pour interroger l'état d'une tâche jusqu'à sa completion, cette méthode est inefficace et déconseillée pour les environnements de production. Pour les tâches de longue durée, l'interrogation peut entraîner un grand nombre d'appels à GetTask. Si de nombreuses tâches sont en file d'attente, cela peut déclencher une limitation globale et affecter d'autres appels d'API. De plus, l'interrogation introduit une latence. Une tâche peut se terminer à tout moment entre deux interrogations, mais vous ne serez informé de son achèvement qu'à la prochaine interrogation, ce qui entraîne un délai moyen égal à la moitié de l'intervalle d'interrogation.
Les informations sur la tâche ne sont conservées que pendant 7 jours après le début de la tâche, après quoi elles ne peuvent plus être récupérées.
Utilisation des tags
Le paramètre Tags de votre requête vous permet d'ajouter des tags à une tâche. Vous pouvez utiliser les tags de la manière suivante :
Rechercher des tâches par tag.
Utiliser les tags comme variables dans un modèle
TargetURI.