Zpracování velkých zpráv v pracovních postupech pomocí blokování dat v Azure Logic Apps

Platí pro: Azure Logic Apps (Consumption)

Azure Logic Apps má různá maximální omezení velikosti obsahu zpráv, která se aktivuje a akce můžou zpracovávat v pracovních postupech aplikace logiky, a to na základě typu prostředku aplikace logiky a prostředí, ve kterém se tento pracovní postup aplikace logiky spouští. Tato omezení pomáhají snížit veškerou režii spojenou s ukládáním a zpracováním velkých zpráv. Další informace o limitech velikosti zpráv najdete v tématu Omezení zpráv v Azure Logic Apps.

Pokud používáte integrované akce HTTP nebo konkrétní akce spravovaného konektoru a potřebujete, aby Služba Azure Logic Apps pracovala se zprávami většími, než jsou výchozí limity, můžete povolit vytváření bloků dat, které rozdělí velké zprávy na menší zprávy. Tímto způsobem můžete i nadále přenášet velké soubory za určitých podmínek. Když použijete tyto předdefinované akce HTTP nebo konkrétní akce spravovaného konektoru, je vytváření bloků dat jediným způsobem, jak může Azure Logic Apps využívat velké zprávy. Tento požadavek znamená, že buď základní výměna zpráv HTTP mezi Azure Logic Apps a dalšími službami musí používat bloky dat, nebo že připojení vytvořená spravovanými konektory, které chcete použít, musí také podporovat blokování dat.

Poznámka

Azure Logic Apps nepodporuje vytváření bloků u triggerů kvůli zvýšené režii při výměně více zpráv. Azure Logic Apps také implementuje blokování bloků dat pro akce HTTP pomocí vlastního protokolu, jak je popsáno v tomto článku. Takže i když váš web nebo webová služba podporuje vytváření bloků dat, nebudou fungovat s blokováním akcí HTTP. Pokud chcete s webem nebo webovou službou používat bloky akcí HTTP, musíte implementovat stejný protokol, který používá Azure Logic Apps. Jinak u akce HTTP nepovolujte vytváření bloků dat.

Tento článek obsahuje přehled o tom, jak funguje vytváření bloků dat v Azure Logic Apps a jak nastavit vytváření bloků dat u podporovaných akcí.

Proč jsou zprávy "velké"?

Zprávy jsou "velké" na základě služby, která tyto zprávy zpracovává. Přesný limit velikosti velkých zpráv se v logic Apps a konektorech liší. Logic Apps ani konektory nemůžou přímo přijímat velké zprávy, které musí být blokované. Informace o limitu velikosti zpráv v Logic Apps najdete v tématu Omezení a konfigurace služby Logic Apps. Informace o limitu velikosti zpráv jednotlivých konektorů najdete v referenční dokumentaci ke konektoru.

Zpracování blokovaných zpráv pro Logic Apps

Logic Apps nemůže přímo používat výstupy z blokovaných zpráv, které jsou větší než limit velikosti zpráv. K obsahu zprávy v těchto výstupech mají přístup pouze akce, které podporují vytváření bloků dat. Akce, která zpracovává velké zprávy, tedy musí splňovat buď tato kritéria:

  • Nativně podporuje vytváření bloků dat, když tato akce patří konektoru.
  • V konfiguraci modulu runtime této akce je povolená podpora bloků dat.

V opačném případě se při pokusu o přístup k výstupu s velkým obsahem zobrazí chyba za běhu. Pokud chcete povolit vytváření bloků dat, přečtěte si téma Nastavení podpory bloků dat.

Zpracování zpráv s blokovanými bloky pro konektory

Služby, které komunikují s Logic Apps, můžou mít vlastní omezení velikosti zpráv. Tato omezení jsou často menší než limity služby Logic Apps. Například za předpokladu, že konektor podporuje vytváření bloků dat, může konektor považovat zprávu o velikosti 30 MB za velkou, zatímco Logic Apps ne. V souladu s limitem tohoto konektoru rozdělí Logic Apps všechny zprávy větší než 30 MB na menší bloky.

U konektorů, které podporují vytváření bloků dat, je základní protokol pro vytváření bloků dat pro koncové uživatele neviditelný. Ne všechny konektory ale podporují vytváření bloků dat, takže tyto konektory generují chyby za běhu, když příchozí zprávy překročí omezení velikosti konektorů.

Pro akce, které podporují a jsou povolené pro vytváření bloků dat, nemůžete použít těla triggerů, proměnné a výrazy, například @triggerBody()?['Content'] proto, že použití některého z těchto vstupů brání provedení operace vytváření bloků dat. Místo toho použijte akci Vytvořit. Konkrétně musíte vytvořit body pole pomocí akce Vytvořit k uložení datového výstupu z textu triggeru, proměnné, výrazu atd., například:

"Compose": {
    "inputs": {
        "body": "@variables('myVar1')"
    },
    "runAfter": {
        "Until": [
            "Succeeded"
        ]
    },
    "type": "Compose"
},

Pokud pak chcete na data odkazovat, použijte v akci vytváření bloků dat .@body('Compose')

"Create_file": {
    "inputs": {
        "body": "@body('Compose')",
        "headers": {
            "ReadFileMetadataFromServer": true
        },
        "host": {
            "connection": {
                "name": "@parameters('$connections')['sftpwithssh_1']['connectionId']"
            }
        },
        "method": "post",
        "path": "/datasets/default/files",
        "queries": {
            "folderPath": "/c:/test1/test1sub",
            "name": "tt.txt",
            "queryParametersSingleEncoded": true
        }
    },
    "runAfter": {
        "Compose": [
            "Succeeded"
        ]
    },
    "runtimeConfiguration": {
        "contentTransfer": {
            "transferMode": "Chunked"
        }
    },
    "type": "ApiConnection"
},

Nastavení bloků dat přes HTTP

V obecných scénářích HTTP můžete rozdělit stahování a nahrávání velkého obsahu přes PROTOKOL HTTP, aby aplikace logiky a koncový bod mohly vyměňovat velké zprávy. Musíte ale zprávy sesuvovat tak, jak služba Logic Apps očekává.

Pokud koncový bod povolil vytváření bloků dat pro stahování nebo nahrávání, akce HTTP v aplikaci logiky automaticky blokují velké zprávy. V opačném případě musíte na koncovém bodu nastavit podporu bloků dat. Pokud koncový bod nebo konektor nevlastníte nebo neřídíte, možná nebudete mít možnost nastavit vytváření bloků dat.

Pokud akce HTTP ještě nepovoluje vytváření bloků dat, musíte také nastavit bloky dat ve vlastnosti akce runTimeConfiguration . Tuto vlastnost můžete nastavit uvnitř akce, a to buď přímo v editoru zobrazení kódu, jak je popsáno dále, nebo v Návrháři Logic Apps, jak je popsáno tady:

  1. V pravém horním rohu akce HTTP zvolte tlačítko se třemi tečky (...) a pak zvolte Nastavení.

    V akci otevřete nabídku nastavení.

  2. V části Přenos obsahu nastavte Povolit blokování dat na Zapnuto.

    Zapnutí vytváření bloků dat

  3. Pokud chcete pokračovat v nastavování bloků dat pro stahování nebo nahrávání, pokračujte následujícími oddíly.

Stahování obsahu v blocích dat

Mnoho koncových bodů při stahování prostřednictvím požadavku HTTP GET automaticky odesílá velké zprávy v blocích dat. Pokud chcete z koncového bodu stáhnout zprávy s bloky dat přes PROTOKOL HTTP, musí koncový bod podporovat částečné požadavky na obsah nebo stažené bloky dat. Když aplikace logiky odešle do koncového bodu požadavek HTTP GET pro stažení obsahu a koncový bod odpoví stavovým kódem 206, bude odpověď obsahovat blokovaný obsah. Logic Apps nemůže řídit, jestli koncový bod podporuje částečné požadavky. Když ale aplikace logiky dostane první odpověď 206, aplikace logiky automaticky odešle několik požadavků na stažení veškerého obsahu.

Pokud chcete zkontrolovat, jestli koncový bod podporuje částečný obsah, odešlete žádost HEAD. Tento požadavek vám pomůže určit, jestli odpověď obsahuje hlavičku Accept-Ranges . Pokud tak koncový bod podporuje blokované stahování, ale neodesílá blokovaný obsah, můžete tuto možnost navrhnout nastavením hlavičky Range v požadavku HTTP GET.

Tento postup popisuje podrobný postup, který Logic Apps používá ke stažení blokovaného obsahu z koncového bodu do aplikace logiky:

  1. Vaše aplikace logiky odešle do koncového bodu požadavek HTTP GET.

    Hlavička požadavku může volitelně obsahovat Range pole, které popisuje rozsah bajtů pro vyžádání bloků obsahu.

  2. Koncový bod odpoví stavovým kódem 206 a textem zprávy HTTP.

    Podrobnosti o obsahu v tomto bloku dat se zobrazí v záhlaví odpovědi Content-Range , včetně informací, které logic Apps pomáhají určit začátek a konec bloku dat a celkovou velikost celého obsahu před vytvořením bloků dat.

  3. Vaše aplikace logiky automaticky odesílá následné požadavky HTTP GET.

    Aplikace logiky odesílá následné požadavky GET, dokud se nenačte celý obsah.

Tato definice akce například zobrazuje požadavek HTTP GET, který nastaví hlavičku Range . Hlavička navrhuje , aby koncový bod reagoval blokovaným obsahem:

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

Požadavek GET nastaví hlavičku Range na "bytes=0-1023", což je rozsah bajtů. Pokud koncový bod podporuje požadavky na částečný obsah, odpoví blokem obsahu z požadovaného rozsahu. V závislosti na koncovém bodu se přesný formát pole hlavičky "Rozsah" může lišit.

Nahrání obsahu v blocích dat

Pokud chcete nahrát blokovaný obsah z akce HTTP, musí mít akce povolenou podporu bloků dat prostřednictvím vlastnosti akce runtimeConfiguration . Toto nastavení umožňuje akci spustit protokol bloků dat. Aplikace logiky pak může do cílového koncového bodu odeslat počáteční zprávu POST nebo PUT. Jakmile koncový bod odpoví s navrhovanou velikostí bloků dat, vaše aplikace logiky bude reagovat odesláním požadavků HTTP PATCH, které obsahují bloky obsahu.

Následující kroky popisují podrobný postup, který Logic Apps používá k nahrání blokovaného obsahu z aplikace logiky do koncového bodu:

  1. Aplikace logiky odešle počáteční požadavek HTTP POST nebo PUT s prázdným textem zprávy. Hlavička požadavku obsahuje následující informace o obsahu, který chce vaše aplikace logiky nahrát v blocích dat:

    Pole hlavičky požadavku Logic Apps Hodnota Typ Description
    x-ms-transfer-mode Blokového Řetězec Označuje, že se obsah nahrál v blocích.
    x-ms-content-length <content-length> Integer Celá velikost obsahu v bajtech před blokováním bloků dat
  2. Koncový bod odpoví stavovým kódem 200 úspěchu a následujícími informacemi:

    Pole hlavičky odpovědi koncového bodu Typ Vyžadováno Popis
    Umístění Řetězec Yes Umístění adresy URL, kam se mají odesílat zprávy HTTP PATCH
    x-ms-chunk-size Integer No Navrhovaná velikost bloků dat v bajtech
  3. Vaše aplikace logiky vytváří a odesílá následné zprávy HTTP PATCH – každá s následujícími informacemi:

    • Blok obsahu založený na x-ms-chunk-size nebo některé interně vypočítané velikosti, dokud se veškerý obsah se součtem x-ms-content-length nenahraje postupně.

    • Následující informace v hlavičce o bloku obsahu odeslaném v každé zprávě PATCH:

      Pole hlavičky požadavku Logic Apps Hodnota Typ Description
      Rozsah obsahu <Rozsah> Řetězec Rozsah bajtů pro aktuální blok obsahu, včetně počáteční hodnoty, koncové hodnoty a celkové velikosti obsahu, například: "bytes=0-1023/10100"
      Typ obsahu <content-type> Řetězec Typ blokovaného obsahu
      Délka obsahu <content-length> Řetězec Délka velikosti aktuálního bloku dat v bajtech
  4. Po každém požadavku PATCH koncový bod potvrdí příjem pro každý blok dat tím, že odpoví stavovým kódem 200 a následujícími hlavičkami odpovědi:

    Pole hlavičky odpovědi koncového bodu Typ Vyžadováno Popis
    Rozsah Řetězec Yes Rozsah bajtů pro obsah přijatý koncovým bodem, například: "bytes=0-1023"
    x-ms-chunk-size Integer No Navrhovaná velikost bloků dat v bajtech

Tato definice akce například zobrazuje požadavek HTTP POST na nahrání blokovaného obsahu do koncového bodu. Ve vlastnosti akce runTimeConfiguration se contentTransfer vlastnost nastaví transferMode na chunked:

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