Megosztás a következőn keresztül:


Nagyméretű üzenetek kezelése munkafolyamatokban adattömbök használatával az Azure Logic Appsben

A következőkre vonatkozik: Azure Logic Apps (használat)

Az Azure Logic Apps különböző maximális korlátokkal rendelkezik az üzenettartalom méretére vonatkozóan, amelyeket az eseményindítók és műveletek képesek kezelni a logikaialkalmazás-munkafolyamatokban, a logikai alkalmazás erőforrástípusa és a logikai alkalmazás munkafolyamatát futtató környezet alapján. Ezek a korlátok segítenek csökkenteni a nagy méretű üzenetek tárolásából és feldolgozásából eredő többletterhelést. Az üzenetméretkorlátokról további információt az Üzenetkorlátok az Azure Logic Appsben című témakörben talál.

Ha beépített HTTP-műveleteket vagy adott felügyelt összekötőműveleteket használ, és az Azure Logic Appsnek az alapértelmezett korlátnál nagyobb üzeneteket kell használnia, engedélyezheti az adattömböket, amelyek kisebb üzenetekre osztanak fel egy nagy üzenetet. Így a nagy méretű fájlokat adott feltételek mellett is átviheti. Valójában, ha ezeket a beépített HTTP-műveleteket vagy adott felügyelt összekötőműveleteket használja, az adattömbkezelés az egyetlen módja annak, hogy az Azure Logic Apps nagy mennyiségű üzenetet használjon fel. Ez a követelmény azt jelenti, hogy vagy az Azure Logic Apps és más szolgáltatások közötti mögöttes HTTP-üzenetcserének adattömböket kell használnia, vagy a használni kívánt felügyelt összekötők által létrehozott kapcsolatoknak is támogatniuk kell az adattömböket.

Megjegyzés

Az Azure Logic Apps nem támogatja az eseményindítók adattömbbe helyezését, mivel a több üzenet cseréjével járó többletterhelés miatt. Az Azure Logic Apps emellett a jelen cikkben leírtak szerint a saját protokolljával valósítja meg a HTTP-műveletek adattömbökbe való beszúrását. Így még ha a webhelye vagy a webszolgáltatása is támogatja az adattömb-készítést, akkor sem fognak működni a HTTP-műveletrészletezéssel. Ahhoz, hogy HTTP-művelettömbolást használjon a webhelyével vagy a webszolgáltatással, ugyanazt a protokollt kell implementálnia, amelyet az Azure Logic Apps használ. Ellenkező esetben ne engedélyezze az adattömb-készítést a HTTP-műveletben.

Ez a cikk áttekintést nyújt arról, hogyan működik az adattömb az Azure Logic Appsben, és hogyan állíthatja be az adattömb-készítést a támogatott műveletekhez.

Mitől "nagyok" az üzenetek?

Az üzeneteket kezelő szolgáltatás alapján az üzenetek "nagyok". A nagy méretű üzenetekre vonatkozó pontos méretkorlát a Logic Apps és az összekötők között eltérő. A Logic Apps és az összekötők sem használhatnak közvetlenül nagy méretű üzeneteket, amelyeket át kell bontani. A Logic Apps üzenetméretkorlátját a Logic Apps korlátai és konfigurációja című témakörben talál. Az egyes összekötők üzenetméretkorlátjával kapcsolatban tekintse meg az összekötő referenciadokumentációját.

Adattömbalapú üzenetkezelés a Logic Appshez

A Logic Apps nem használhatja közvetlenül az üzenetméretkorlátnál nagyobb adattömbökből származó kimeneteket. Csak az adattömböket támogató műveletek férhetnek hozzá az üzenet tartalmához ezekben a kimenetekben. A nagyméretű üzeneteket kezelő műveletnek tehát az alábbi feltételeknek kell megfelelnie:

  • Natív módon támogatja az adattömb-készítést, ha ez a művelet egy összekötőhöz tartozik.
  • Engedélyezze az adattömb-támogatást a művelet futtatókörnyezeti konfigurációjában.

Ellenkező esetben futásidejű hibaüzenet jelenik meg, amikor nagy tartalomkimenetet próbál elérni. Az adattömb-készítés engedélyezéséhez lásd: Az adattömb-támogatás beállítása.

Adattömbök üzenetkezelése összekötőkhöz

A Logic Appsszel kommunikáló szolgáltatások saját üzenetméretkorlátokkal rendelkezhetnek. Ezek a korlátok gyakran kisebbek, mint a Logic Apps korlátja. Tegyük fel például, hogy egy összekötő támogatja az adattömb-készítést, előfordulhat, hogy egy összekötő egy 30 MB-os üzenetet nagy méretűnek tekint, míg a Logic Apps nem. Az összekötő korlátjának betartása érdekében a Logic Apps a 30 MB-nál nagyobb üzeneteket kisebb adattömbökre osztja fel.

Az adattömböket támogató összekötők esetében a mögöttes adattömb-protokoll láthatatlan a végfelhasználók számára. Azonban nem minden összekötő támogatja az adattömböket, ezért ezek az összekötők futásidejű hibákat okoznak, amikor a bejövő üzenetek túllépik az összekötők méretkorlátját.

Az adattömbök használatát támogató és engedélyezett műveletek esetén nem használhat triggertörzseket, változókat és kifejezéseket, például @triggerBody()?['Content'] azért, mert ezen bemenetek bármelyikének használata megakadályozza az adattömb-készítési művelet végrehajtását. Ehelyett használja a Compose műveletet. Konkrétan létre kell hoznia egy body mezőt a Compose művelettel az eseményindító törzséből, változójából, kifejezéséből stb. származó adatkimenet tárolásához, például:

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

Ezután az adatokra való hivatkozáshoz az adattömb műveletben használja a következőt @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"
},

Adattömb beállítása HTTP-en keresztül

Általános HTTP-forgatókönyvekben feloszthatja a nagy méretű tartalomletöltéseket és -feltöltéseket HTTP-en keresztül, hogy a logikai alkalmazás és a végpont nagy mennyiségű üzenetet cserélhessenek. Az üzeneteket azonban a Logic Apps által elvárt módon kell beszednie.

Ha egy végpont engedélyezte az adattömbök letöltését vagy feltöltését, a logikai alkalmazás HTTP-műveletei automatikusan nagy méretű üzeneteket olvasnak el. Ellenkező esetben be kell állítania az adattömb-támogatást a végponton. Ha nem rendelkezik a végpont vagy az összekötő tulajdonosával vagy vezérlésével, előfordulhat, hogy nincs lehetősége az adattömb-készítés beállítására.

Ha egy HTTP-művelet még nem engedélyezi az adattömb-készítést, akkor az adattömb-készítést is be kell állítania a művelet tulajdonságában runTimeConfiguration . Ezt a tulajdonságot beállíthatja a műveleten belül, közvetlenül a kódnézet-szerkesztőben, a későbbiekben leírtak szerint, vagy a Logic Apps Designerben az itt leírtak szerint:

  1. A HTTP-művelet jobb felső sarkában kattintson a három pontra (...), majd a Beállítások gombra.

    A műveletben nyissa meg a Beállítások menüt

  2. A Tartalomátvitel területen állítsa az Adattömb engedélyezése beállítást Be értékre.

    Adatrészletezés bekapcsolása

  3. A letöltések vagy feltöltések adattömbök beállításának folytatásához folytassa az alábbi szakaszokkal.

Tartalom letöltése adattömbökben

Számos végpont automatikusan nagy méretű üzeneteket küld el adattömbökben, amikor egy HTTP GET-kérésen keresztül töltődik le. Ha http-en keresztül szeretne adatokat letölteni egy végpontról, a végpontnak támogatnia kell a részleges tartalomkéréseket vagy az adattömbök letöltését. Amikor a logikai alkalmazás HTTP GET-kérést küld egy végpontnak a tartalom letöltéséhez, és a végpont "206" állapotkóddal válaszol, a válasz adattömbben lévő tartalmat tartalmaz. A Logic Apps nem tudja szabályozni, hogy egy végpont támogatja-e a részleges kéréseket. Ha azonban a logikai alkalmazás megkapja az első "206" választ, a logikai alkalmazás automatikusan több kérést küld az összes tartalom letöltéséhez.

Annak ellenőrzéséhez, hogy egy végpont támogatja-e a részleges tartalmakat, küldjön EGY HEAD-kérést. Ez a kérés segít meghatározni, hogy a válasz tartalmazza-e a fejlécet Accept-Ranges . Így ha a végpont támogatja az adattömbök letöltését, de nem küld adattömböket, ezt a lehetőséget a HTTP GET-kérelem fejlécének Range beállításával javasolhatja.

Ezek a lépések ismertetik azt a részletes folyamatot, amelyet a Logic Apps az adattömb tartalmainak végpontról a logikai alkalmazásba való letöltéséhez használ:

  1. A logikai alkalmazás HTTP GET kérést küld a végpontnak.

    A kérelemfejléc opcionálisan tartalmazhat egy Range mezőt, amely a tartalomtömbök igénylésére szolgáló bájttartományt írja le.

  2. A végpont a "206" állapotkóddal és egy HTTP-üzenettörzsgel válaszol.

    Az ebben az adattömbben lévő tartalom részletei megjelennek a válasz Content-Range fejlécében, beleértve azokat az információkat, amelyek segítenek a Logic Appsnek meghatározni az adattömb kezdő és záró elemét, valamint a teljes tartalom teljes méretét az adattömb előtt.

  3. A logikai alkalmazás automatikusan küld nyomon követési HTTP GET-kéréseket.

    A logikai alkalmazás a teljes tartalom lekéréséig küld nyomon követési GET-kéréseket.

Ez a műveletdefiníció például egy HTTP GET kérést jelenít meg, amely beállítja a fejlécet Range . A fejléc azt javasolja , hogy a végpontnak az adattömbbe becsomagolt tartalommal kell válaszolnia:

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

A GET-kérelem a "Range" fejlécet "bytes=0-1023" értékre állítja, amely a bájtok tartománya. Ha a végpont támogatja a részleges tartalomra vonatkozó kéréseket, a végpont a kért tartományból származó tartalomrészlettel válaszol. A végponttól függően a "Tartomány" fejlécmező pontos formátuma eltérhet.

Tartalom feltöltése adattömbökbe

Ha egy HTTP-műveletből szeretné feltölteni az adattömb tartalmát, a műveletnek engedélyeznie kell az adattömb-támogatást a művelet tulajdonságán runtimeConfiguration keresztül. Ez a beállítás lehetővé teszi, hogy a művelet elindítsa az adattömb-protokollt. A logikai alkalmazás ezután küldhet egy kezdeti POST vagy PUT üzenetet a célvégpontnak. Miután a végpont egy javasolt adattömbmérettel válaszol, a logikai alkalmazás nyomon követi a tartalomtömböket tartalmazó HTTP PATCH-kérések küldésével.

Az alábbi lépések azt a részletes folyamatot írják le, amelyet a Logic Apps a logikai alkalmazásból egy végpontra történő adattömbbe való feltöltéshez használ:

  1. A logikai alkalmazás egy kezdeti HTTP POST vagy PUT kérést küld egy üres üzenettörzsgel. A kérés fejléce a következő információkat tartalmazza a logikai alkalmazás által az adattömbökbe feltölteni kívánt tartalomról:

    Logic Apps-kérelem fejlécmezője Érték Típus Description
    x-ms-transfer-mode adattömb Sztring Azt jelzi, hogy a tartalom adattömbökbe van feltöltve
    x-ms-content-length < tartalomhossz> Egész szám A teljes tartalomméret bájtban, adattömb előtt
  2. A végpont a "200" sikerességi állapotkóddal és a következő információkkal válaszol:

    Végpont válaszfejlécének mezője Típus Kötelező Leírás
    Hely Sztring Yes Az URL-cím helye, ahová a HTTP PATCH-üzeneteket el kell küldeni
    x-ms-chunk-size Egész szám No A javasolt adattömbméret bájtban
  3. A logikai alkalmazás nyomon követő HTTP PATCH-üzeneteket hoz létre és küld el – ezek mindegyike a következő információkkal:

    • Egy x-ms-chunk-size vagy valamilyen belsőleg számított méreten alapuló tartalomtömb, amíg az összes x-ms-content-length értéket összegzi egymás után

    • Az egyes PATCH-üzenetekben küldött tartalomtömbre vonatkozó alábbi fejlécinformációk:

      Logic Apps-kérelem fejlécmezője Érték Típus Description
      Tartalomtartomány < Tartomány> Sztring Az aktuális tartalomtömb bájttartománya, beleértve a kezdőértéket, a záróértéket és a teljes tartalomméretet, például: "bájt=0-1023/10100"
      Tartalomtípus < tartalomtípus> Sztring Az adattömbben lévő tartalom típusa
      Tartalomhossz < tartalomhossz> Sztring Az aktuális adattömb méretének hossza bájtban
  4. Az egyes PATCH-kérések után a végpont az egyes adattömbök nyugtáit a "200" állapotkóddal és az alábbi válaszfejlécekkel válaszolja meg:

    Végpont válaszának fejlécmezője Típus Kötelező Leírás
    Tartomány Sztring Yes A végpont által fogadott tartalom bájttartománya, például: "bytes=0-1023"
    x-ms-chunk-size Egész szám No A javasolt adattömbméret bájtban

Ez a műveletdefiníció például egy HTTP POST-kérést jelenít meg az adattömbben szereplő tartalom végpontra való feltöltéséhez. A művelet tulajdonságában runTimeConfiguration a tulajdonság transferModechunkedértéke contentTransfer :

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