Gérer les messages volumineux avec la segmentation dans Azure Logic AppsHandle large messages with chunking in Azure Logic Apps

Pour traiter les messages, Logic Apps limite leur contenu à une taille maximale.When handling messages, Logic Apps limits message content to a maximum size. Cette limite permet de réduire la surcharge créée par le stockage et le traitement des messages volumineux.This limit helps reduce overhead created by storing and processing large messages. Pour gérer les messages dépassant cette limite de taille, Logic Apps peut segmenter un message volumineux en messages de plus petite taille.To handle messages larger than this limit, Logic Apps can chunk a large message into smaller messages. De cette façon, vous pouvez toujours transférer des fichiers volumineux à l’aide de Logic Apps dans des conditions spécifiques.That way, you can still transfer large files using Logic Apps under specific conditions. Lors de la communication avec d’autres services via des connecteurs ou HTTP, Logic Apps peut traiter des messages volumineux mais uniquement sous forme de segments.When communicating with other services through connectors or HTTP, Logic Apps can consume large messages but only in chunks. Cette condition signifie que les connecteurs doivent également prendre en charge la segmentation, ou que le protocole d’échange de messages HTTP sous-jacent entre Logic Apps et ces services doit utiliser la segmentation.This condition means connectors must also support chunking, or the underlying HTTP message exchange between Logic Apps and these services must use chunking.

Cet article explique comment configurer la segmentation des actions de gestion des messages qui dépassent la taille maximale autorisée.This article shows how you can set up chunking for actions handling messages that are larger than the limit. Les déclencheurs d’application logique ne prennent pas en charge la segmentation en raison de la surcharge liée à l’échange de nombreux messages.Logic App triggers don't support chunking because of the increased overhead of exchanging multiple messages.

Qu’est-ce qui rend les messages « volumineux » ?What makes messages "large"?

Les messages sont considérés comme « volumineux » selon le service qui les gère.Messages are "large" based on the service handling those messages. La taille maximale réelle des messages volumineux varie selon les connecteurs et Logic Apps.The exact size limit on large messages differs across Logic Apps and connectors. Logic Apps et les différents connecteurs sont incapables de gérer directement les messages volumineux, qui doivent donc être segmentés.Both Logic Apps and connectors can't directly consume large messages, which must be chunked. Pour connaître la taille maximale de message pour Logic Apps, consultez l’article Limites et configuration de Logic Apps.For the Logic Apps message size limit, see Logic Apps limits and configuration. Pour connaître la taille maximale de message pour les différents connecteurs, consultez les détails techniques spécifiques à chaque connecteur.For each connector's message size limit, see the connector's specific technical details.

Gestion des messages segmentés pour Logic AppsChunked message handling for Logic Apps

Logic Apps ne peut pas utiliser directement les sorties provenant de messages segmentés dont la taille dépasse la limite autorisée.Logic Apps can't directly use outputs from chunked messages that are larger than the message size limit. Seules les actions qui prennent en charge la segmentation peuvent accéder au contenu du message dans ces sorties.Only actions that support chunking can access the message content in these outputs. Par conséquent, une action qui gère les messages volumineux doit répondre à l’un de ces critères :So, an action that handles large messages must meet either these criteria:

  • Prendre en charge la segmentation de manière native lorsque cette action appartient à un connecteur.Natively support chunking when that action belongs to a connector.
  • Avoir la prise en charge de la segmentation activée dans la configuration d’exécution de cette action.Have chunking support enabled in that action's runtime configuration.

Dans le cas contraire, vous obtenez une erreur d’exécution lorsque vous essayez d’accéder à un contenu volumineux.Otherwise, you get a runtime error when you try to access large content output. Pour activer la segmentation, consultez l’article Set up chunking support (Configurer la prise en charge de la segmentation).To enable chunking, see Set up chunking support.

Gestion des messages segmentés pour les connecteursChunked message handling for connectors

Les services qui communiquent avec Logic Apps peuvent avoir leurs propres limites de taille de message.Services that communicate with Logic Apps can have their own message size limits. Ces limites sont souvent inférieures à la limite de Logic Apps.These limits are often smaller than the Logic Apps limit. Par exemple, en supposant qu’un connecteur prend en charge la segmentation, celui-ci peut considérer un message de 30 Mo comme volumineux, alors que Logic Apps ne le considérera pas comme tel.For example, assuming that a connector supports chunking, a connector might consider a 30-MB message as large, while Logic Apps does not. Pour respecter la limite de ce connecteur, Logic Apps fractionne tout message supérieur à 30 Mo en segments plus petits.To comply with this connector's limit, Logic Apps splits any message larger than 30 MB into smaller chunks.

Pour les connecteurs qui prennent en charge la segmentation, le protocole de segmentation sous-jacent n’est pas visible par les utilisateurs finaux.For connectors that support chunking, the underlying chunking protocol is invisible to end users. Toutefois, tous les connecteurs ne prennent pas en charge la segmentation. Ces connecteurs génèrent alors des erreurs d’exécution lorsque les messages entrants dépassent la taille maximale autorisée pour ces connecteurs.However, not all connectors support chunking, so these connectors generate runtime errors when incoming messages exceed the connectors' size limits.

Notes

Pour les actions qui utilisent la segmentation, vous ne pouvez pas passer le corps du déclencheur ou utiliser des expressions telles que @triggerBody()?['Content'] dans ces actions.For actions that use chunking, you can't pass the trigger body or use expressions such as @triggerBody()?['Content'] in those actions. Au lieu de cela, pour le contenu de fichier texte ou JSON, vous pouvez essayer d’utiliser l’action Compose ou créer une variable pour gérer ce contenu.Instead, for text or JSON file content, you can try using the Compose action or create a variable to handle that content. Si le corps du déclencheur contient d’autres types de contenu, tels que des fichiers multimédias, vous devez effectuer d’autres étapes pour gérer ce contenu.If the trigger body contains other content types, such as media files, you need to perform other steps to handle that content.

Configurer la segmentation via HTTPSet up chunking over HTTP

Dans les scénarios HTTP génériques, vous pouvez fractionner les téléchargements et chargements de contenu volumineux via HTTP, afin que votre application logique et un point de terminaison puissent échanger des messages volumineux.In generic HTTP scenarios, you can split up large content downloads and uploads over HTTP, so that your logic app and an endpoint can exchange large messages. Toutefois, vous devez segmenter ces messages conformément à la limite autorisée par Logic Apps.However, you must chunk messages in the way that Logic Apps expects.

Si un point de terminaison prend en charge la segmentation pour les téléchargements ou les chargements, les actions HTTP dans votre application logique segmenteront automatiquement les messages volumineux.If an endpoint has enabled chunking for downloads or uploads, the HTTP actions in your logic app automatically chunk large messages. Dans le cas contraire, vous devez configurer la prise en charge de la segmentation sur le point de terminaison.Otherwise, you must set up chunking support on the endpoint. Si vous ne possédez ou ne contrôlez pas le point de terminaison ou le connecteur, vous ne serez peut-être pas en mesure de configurer la segmentation.If you don't own or control the endpoint or connector, you might not have the option to set up chunking.

En outre, si une action HTTP ne prend pas encore en charge la segmentation, vous devez également configurer la segmentation dans la propriété runTimeConfiguration de l’action.Also, if an HTTP action doesn't already enable chunking, you must also set up chunking in the action's runTimeConfiguration property. Vous pouvez définir cette propriété à l’intérieur de l’action, soit directement dans l’éditeur en mode Code comme décrit plus loin, soit dans le Concepteur Logic Apps comme décrit ci-après :You can set this property inside the action, either directly in the code view editor as described later, or in the Logic Apps Designer as described here:

  1. Dans le coin supérieur droit de l’action HTTP, sélectionnez le bouton représentant des points de suspension ( ... ), puis Paramètres.In the HTTP action's upper-right corner, choose the ellipsis button (...), and then choose Settings.

    Dans l’action, ouvrez le menu Paramètres

  2. Sous Transfert de contenu, définissez Autoriser la segmentation sur Activé.Under Content Transfer, set Allow chunking to On.

    Activer la segmentation

  3. Pour poursuivre la configuration de la segmentation pour les téléchargements ou les chargements, consultez les sections suivantes.To continue setting up chunking for downloads or uploads, continue with the following sections.

Télécharger du contenu sous forme de segmentsDownload content in chunks

De nombreux points de terminaison envoient automatiquement les messages volumineux sous forme de segments lorsque ces derniers sont téléchargés via une requête HTTP GET.Many endpoints automatically send large messages in chunks when downloaded through an HTTP GET request. Pour télécharger des messages segmentés depuis un point de terminaison via HTTP, le point de terminaison doit prendre en charge les requêtes de contenu partiel, ou téléchargements segmentés.To download chunked messages from an endpoint over HTTP, the endpoint must support partial content requests, or chunked downloads. Lorsque votre application logique envoie une requête HTTP GET à un point de terminaison pour télécharger du contenu et que le point de terminaison répond avec un code d’état « 206 », la réponse contient le contenu segmenté.When your logic app sends an HTTP GET request to an endpoint for downloading content, and the endpoint responds with a "206" status code, the response contains chunked content. Logic Apps ne peut pas déterminer si un point de terminaison prend en charge les requêtes partielles.Logic Apps can't control whether an endpoint supports partial requests. Toutefois, lorsque votre application logique reçoit la première réponse « 206 », votre application logique envoie automatiquement plusieurs requêtes pour télécharger l’ensemble du contenu.However, when your logic app gets the first "206" response, your logic app automatically sends multiple requests to download all the content.

Pour vérifier si un point de terminaison peut prendre en charge le contenu partiel, envoyez une requête HEAD.To check whether an endpoint can support partial content, send a HEAD request. Cette requête vous permet de savoir si la réponse contient l’en-tête Accept-Ranges.This request helps you determine whether the response contains the Accept-Ranges header. De cette façon, si le point de terminaison prend en charge les téléchargements segmentés, mais n’envoie pas de contenu segmenté, vous pouvez suggérer cette option en définissant l’en-tête Range dans votre requête HTTP GET.That way, if the endpoint supports chunked downloads but doesn't send chunked content, you can suggest this option by setting the Range header in your HTTP GET request.

Ces étapes décrivent le processus détaillé utilisé par Logic Apps pour télécharger le contenu segmenté d’un point de terminaison vers votre application logique :These steps describe the detailed process Logic Apps uses for downloading chunked content from an endpoint to your logic app:

  1. Votre application logique envoie une requête HTTP GET au point de terminaison.Your logic app sends an HTTP GET request to the endpoint.

    L’en-tête de la requête peut éventuellement inclure un champ Range qui définit une plage d’octets pour la requête de segments de contenu.The request header can optionally include a Range field that describes a byte range for requesting content chunks.

  2. Le point de terminaison renvoie le code d’état « 206 » et un corps de message HTTP.The endpoint responds with the "206" status code and an HTTP message body.

    Les informations détaillées sur le contenu de ce segment s’affichent dans l’en-tête Content-Range de la réponse, notamment des informations qui permettent à Logic Apps d’identifier le début et la fin du segment, ainsi que la taille totale du contenu avant segmentation.Details about the content in this chunk appear in the response's Content-Range header, including information that helps Logic Apps determine the start and end for the chunk, plus the total size of the entire content before chunking.

  3. Votre application logique envoie automatiquement les requêtes HTTP GET suivantes.Your logic app automatically sends follow-up HTTP GET requests.

    Votre application logique envoie des requêtes GET jusqu’à ce que l’ensemble du contenu soit récupéré.Your logic app sends follow-up GET requests until the entire content is retrieved.

Par exemple, cette définition d’action affiche une requête HTTP GET qui définit l’en-tête Range.For example, this action definition shows an HTTP GET request that sets the Range header. L’en-tête suggère au point de terminaison de répondre en envoyant du contenu segmenté :The header suggests that the endpoint should respond with chunked content:

"getAction": {
    "inputs": {
        "headers": {
            "Range": "bytes=0-1023"
        },
       "method": "GET",
       "uri": "http://myAPIendpoint/api/downloadContent"
    },
    "runAfter": {},
    "type": "Http"
}

La requête GET définit l’en-tête « Range » sur « bytes=0-1023 », qui correspond à la plage d’octets.The GET request sets the "Range" header to "bytes=0-1023", which is the range of bytes. Si le point de terminaison prend en charge les requêtes de contenu partiel, le point de terminaison répond en envoyant un segment de contenu dans la plage demandée.If the endpoint supports requests for partial content, the endpoint responds with a content chunk from the requested range. Le format exact du champ d’en-tête « Range » peut varier selon les points de terminaison.Based on the endpoint, the exact format for the "Range" header field can differ.

Charger du contenu sous forme de segmentsUpload content in chunks

Pour charger du contenu segmenté à partir d’une action HTTP, la prise en charge de la segmentation doit être activée dans la propriété runtimeConfiguration de l’action.To upload chunked content from an HTTP action, the action must have enabled chunking support through the action's runtimeConfiguration property. Ce paramètre permet à l’action de démarrer le protocole de segmentation.This setting permits the action to start the chunking protocol. Votre logique application peut ensuite envoyer un message POST ou PUT initial au point de terminaison cible.Your logic app can then send an initial POST or PUT message to the target endpoint. Une fois que le point de terminaison répond en envoyant une suggestion de taille de segment, votre application logique poursuit le processus en envoyant des requêtes HTTP PATCH qui contiennent les segments de contenu.After the endpoint responds with a suggested chunk size, your logic app follows up by sending HTTP PATCH requests that contain the content chunks.

Ces étapes décrivent le processus détaillé utilisé par Logic Apps pour charger le contenu segmenté de votre application logique vers un point de terminaison :These steps describe the detailed process Logic Apps uses for uploading chunked content from your logic app to an endpoint:

  1. Votre application logique envoie une requête HTTP POST ou PUT initiale avec un corps de message vide.Your logic app sends an initial HTTP POST or PUT request with an empty message body. L’en-tête de la requête inclut les informations sur le contenu que votre application logique souhaite envoyer sous forme de segments :The request header, includes this information about the content that your logic app wants to upload in chunks:

    Champ d’en-tête de la requête Logic AppsLogic Apps request header field ValeurValue TypeType DescriptionDescription
    x-ms-transfer-modex-ms-transfer-mode segmentéchunked StringString Indique que le contenu est chargé sous forme de segmentsIndicates that the content is uploaded in chunks
    x-ms-content-lengthx-ms-content-length <content-length><content-length> IntegerInteger La taille, en octets, de l’intégralité du contenu avant segmentationThe entire content size in bytes before chunking
  2. Le point de terminaison répond avec le code d’état de réussite « 200 » et ces informations facultatives :The endpoint responds with "200" success status code and this optional information:

    Champ d’en-tête de réponse de point de terminaisonEndpoint response header field TypeType ObligatoireRequired DescriptionDescription
    x-ms-chunk-sizex-ms-chunk-size IntegerInteger NonNo La taille de segment suggérée en octetsThe suggested chunk size in bytes
    LieuLocation StringString OuiYes L’adresse URL vers laquelle envoyer les messages HTTP PATCHThe URL location where to send the HTTP PATCH messages
  3. Votre application logique crée et envoie des messages HTTP PATCH de suivi, chacun contenant les informations suivantes :Your logic app creates and sends follow-up HTTP PATCH messages - each with this information:

    • Un segment de contenu correspondant à la taille x-ms-chunk-size ou à une taille calculée en interne, jusqu’à ce que tout le contenu correspondant à la valeur x-ms-content-length soit chargé de manière séquentielleA content chunk based on x-ms-chunk-size or some internally calculated size until all the content totaling x-ms-content-length is sequentially uploaded

    • Ces informations d’en-tête relatives au segment de contenu envoyé dans chaque message PATCH :These header details about the content chunk sent in each PATCH message:

      Champ d’en-tête de la requête Logic AppsLogic Apps request header field ValeurValue TypeType DescriptionDescription
      Content-RangeContent-Range <range><range> StringString La plage d’octets pour le segment de contenu actuel, y compris la valeur de début, la valeur de fin et la taille totale du contenu, par exemple : « bytes=0-1023/10100 »The byte range for the current content chunk, including the starting value, ending value, and the total content size, for example: "bytes=0-1023/10100"
      Content-TypeContent-Type <content-type><content-type> StringString Le type de contenu segmentéThe type of chunked content
      Content-LengthContent-Length <content-length><content-length> StringString La longueur, en octets, du segment actuelThe length of size in bytes of the current chunk
  4. Après chaque requête PATCH, le point de terminaison confirme la réception de chaque segment en renvoyant le code d’état « 200 » et les en-têtes de réponse suivants :After each PATCH request, the endpoint confirms the receipt for each chunk by responding with the "200" status code and the following response headers:

    Champ d’en-tête de réponse de point de terminaisonEndpoint response header field TypeType ObligatoireRequired DescriptionDescription
    PlageRange StringString OuiYes La plage d’octets pour le contenu qui a été reçu par le point de terminaison, par exemple: « octets = 0-1023 »The byte range for content that has been received by the endpoint, for example: "bytes=0-1023"
    x-ms-chunk-sizex-ms-chunk-size IntegerInteger NonNo La taille de segment suggérée en octetsThe suggested chunk size in bytes

Par exemple, cette définition d’action affiche une requête HTTP POST pour le chargement de contenu segmenté vers un point de terminaison.For example, this action definition shows an HTTP POST request for uploading chunked content to an endpoint. Dans la propriété runTimeConfiguration de l’action, la propriété contentTransfer définit transferMode sur chunked :In the action's runTimeConfiguration property, the contentTransfer property sets transferMode to chunked:

"postAction": {
    "runtimeConfiguration": {
        "contentTransfer": {
            "transferMode": "chunked"
        }
    },
    "inputs": {
        "method": "POST",
        "uri": "http://myAPIendpoint/api/action",
        "body": "@body('getAction')"
    },
    "runAfter": {
    "getAction": ["Succeeded"]
    },
    "type": "Http"
}