Azure Logic Apps'te öbekleme kullanarak iş akışlarındaki büyük iletileri işleme

Şunlar için geçerlidir: Azure Logic Apps (Tüketim)

Azure Logic Apps' in, mantıksal uygulama kaynak türüne ve mantıksal uygulama iş akışının çalıştığı ortama bağlı olarak, tetikleyicilerin ve eylemlerin mantıksal uygulama iş akışlarında işleyebileceği ileti içerik boyutu üzerinde farklı üst sınırlara sahiptir. Bu sınırlar , büyük iletilerin depolanmasından ve işlenmesinden kaynaklanan ek yüklerin azaltılmasına yardımcı olur. İleti boyutu sınırları hakkında daha fazla bilgi için Bkz. Azure Logic Apps'te ileti sınırları.

Yerleşik HTTP eylemlerini veya belirli yönetilen bağlayıcı eylemlerini kullanıyorsanız ve Azure Logic Apps'in varsayılan sınırlardan daha büyük iletilerle çalışması gerekiyorsa, büyük bir iletiyi daha küçük iletilere bölen öbeklemeyi etkinleştirebilirsiniz. Bu şekilde, büyük dosyaları belirli koşullar altında aktarmaya devam edebilirsiniz. Aslında, bu yerleşik HTTP eylemlerini veya belirli yönetilen bağlayıcı eylemlerini kullandığınızda, Azure Logic Apps'in büyük iletileri kullanabilmesinin tek yolu öbeklemedir. Bu gereksinim, Azure Logic Apps ile diğer hizmetler arasında temel alınan HTTP ileti alışverişinin öbekleme kullanması gerektiği veya kullanmak istediğiniz yönetilen bağlayıcılar tarafından oluşturulan bağlantıların öbeklemeyi de desteklemesi gerektiği anlamına gelir.

Not

Azure Logic Apps, birden çok ileti alışverişinde artan ek yük nedeniyle tetikleyicilerde öbeklemeye yönelik destek sağlamaz. Ayrıca Azure Logic Apps, bu makalede açıklandığı gibi kendi protokolünü kullanarak HTTP eylemleri için öbekleme uygular. Bu nedenle, web siteniz veya web hizmetiniz öbeklemesi desteklese bile HTTP eylemi öbekleme ile çalışmaz. Web siteniz veya web hizmetinizle HTTP eylem öbekleme kullanmak için Azure Logic Apps tarafından kullanılan protokolü uygulamanız gerekir. Aksi takdirde, HTTP eyleminde öbek oluşturmayı etkinleştirmeyin.

Bu makalede, Azure Logic Apps'te öbeklemenin nasıl çalıştığı ve desteklenen eylemlerde öbeklemenin nasıl ayarlanacağı hakkında genel bir bakış sağlanır.

İletileri "büyük" yapan nedir?

İletiler, bu iletileri işleyen hizmete göre "büyük" olur. Büyük iletilerde tam boyut sınırı Logic Apps ve bağlayıcılar arasında farklılık gösterir. Hem Logic Apps hem de bağlayıcılar, öbeklenmiş olması gereken büyük iletileri doğrudan kullanamaz. Logic Apps ileti boyutu sınırı için bkz. Logic Apps sınırları ve yapılandırması. Her bağlayıcının ileti boyutu sınırı için bağlayıcının başvuru belgelerine bakın.

Logic Apps için öbeklenmiş ileti işleme

Logic Apps, ileti boyutu sınırından daha büyük olan öbeklenmiş iletilerden gelen çıkışları doğrudan kullanamaz. Yalnızca öbekleyi destekleyen eylemler bu çıkışlardaki ileti içeriğine erişebilir. Bu nedenle, büyük iletileri işleyen bir eylem şu ölçütlerden birini karşılamalıdır:

  • Bu eylem bir bağlayıcıya ait olduğunda öbeklemeye yerel olarak destek sağlar.
  • Bu eylemin çalışma zamanı yapılandırmasında öbekleme desteğinin etkinleştirilmesini sağlayın.

Aksi takdirde, büyük içerik çıkışına erişmeye çalıştığınızda bir çalışma zamanı hatası alırsınız. Öbekleme özelliğini etkinleştirmek için bkz. Öbek desteğini ayarlama.

Bağlayıcılar için öbeklenmiş ileti işleme

Logic Apps ile iletişim kuran hizmetlerin kendi ileti boyutu sınırları olabilir. Bu sınırlar genellikle Logic Apps sınırından daha küçüktür. Örneğin, bir bağlayıcının öbeklemesi desteklediğini varsayarsak, bağlayıcı 30 MB'lık bir iletiyi büyük olarak kabul edebilir ancak Logic Apps bunu yapmaz. Logic Apps, bu bağlayıcının sınırına uymak için 30 MB'tan büyük tüm iletileri daha küçük öbeklere böler.

Öbeklemesini destekleyen bağlayıcılar için temel alınan öbekleme protokolü son kullanıcılar tarafından görünmez. Ancak tüm bağlayıcılar öbeklemesi desteklemediğinden, gelen iletiler bağlayıcıların boyut sınırlarını aştığında bu bağlayıcılar çalışma zamanı hataları oluşturur.

Öbekleme için etkinleştirilen ve destekleyen eylemler için, bu girişlerden herhangi birinin kullanılması öbekleme işleminin gerçekleşmesini önlediğinden gibi @triggerBody()?['Content'] tetikleyici gövdelerini, değişkenleri ve ifadeleri kullanamazsınız. Bunun yerine Oluştur eylemini kullanın. Özellikle, tetikleyici gövdesi, değişken, ifade vb. veri çıkışını depolamak için Oluştur eylemini kullanarak bir body alan oluşturmanız gerekir, örneğin:

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

Ardından, öbekleme eyleminde verilere başvurmak için kullanın @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"
},

HTTP üzerinden öbekleme ayarlama

Genel HTTP senaryolarında, büyük içerik indirmelerini ve yüklemelerini HTTP üzerinden bölerek mantıksal uygulamanızın ve bir uç noktanın büyük iletiler alışverişinde bulunabilmesini sağlayabilirsiniz. Ancak, iletileri Logic Apps'in beklediği şekilde öbeklemelisiniz.

Uç nokta indirmeler veya karşıya yüklemeler için öbekleme özelliğini etkinleştirdiyse, mantıksal uygulamanızdaki HTTP eylemleri büyük iletileri otomatik olarak öbekler. Aksi takdirde uç noktada öbek desteğini ayarlamanız gerekir. Uç nokta veya bağlayıcının sahibi değilseniz veya bunu denetlemezseniz öbekleme ayarlama seçeneğiniz olmayabilir.

Ayrıca, bir HTTP eylemi öbeklemesi henüz etkinleştirmediyse, eylemin runTimeConfiguration özelliğinde öbek oluşturmayı da ayarlamanız gerekir. Bu özelliği eylemin içinde, daha sonra açıklandığı gibi doğrudan kod görünümü düzenleyicisinde veya burada açıklandığı gibi Logic Apps Tasarımcısı'nda ayarlayabilirsiniz:

  1. HTTP eyleminin sağ üst köşesinde üç nokta düğmesini (...) ve ardından Ayarlar'ı seçin.

    Eylemde ayarlar menüsünü açın

  2. İçerik Aktarımı'nın altında Öbeklemeye izin ver'iAçık olarak ayarlayın.

    Öbekleyi açma

  3. İndirmeler veya karşıya yüklemeler için öbekleme ayarlamaya devam etmek için aşağıdaki bölümlerle devam edin.

Öbekler halinde içerik indirme

Birçok uç nokta, bir HTTP GET isteği aracılığıyla indirildiğinde otomatik olarak büyük iletileri öbekler halinde gönderir. HTTP üzerinden bir uç noktadan öbeklenmiş iletileri indirmek için uç noktanın kısmi içerik isteklerini veya öbeklenmiş indirmeleri desteklemesi gerekir. Mantıksal uygulamanız içerik indirmek için bir uç noktaya HTTP GET isteği gönderdiğinde ve uç nokta "206" durum koduyla yanıt veriyorsa, yanıt öbeklenmiş içerik içerir. Logic Apps, uç noktanın kısmi istekleri destekleyip desteklemediğini denetleyemiyor. Ancak mantıksal uygulamanız ilk "206" yanıtını aldığında, mantıksal uygulamanız otomatik olarak tüm içeriği indirmek için birden çok istek gönderir.

Uç noktanın kısmi içeriği destekleyip desteklemediğini denetlemek için bir HEAD isteği gönderin. Bu istek, yanıtın üst bilgiyi içerip içermediğini belirlemenize Accept-Ranges yardımcı olur. Bu şekilde, uç nokta öbeklenmiş indirmeleri destekliyorsa ancak öbeklenmiş içerik göndermiyorsa, HTTP GET isteğinizde üst bilgiyi ayarlayarak Range bu seçeneği önerebilirsiniz.

Bu adımlarda Logic Apps'in uç noktadan mantıksal uygulamanıza öbeklenmiş içerik indirmek için kullandığı ayrıntılı işlem açıklanmaktadır:

  1. Mantıksal uygulamanız uç noktaya bir HTTP GET isteği gönderir.

    İstek üst bilgisi isteğe bağlı olarak içerik öbekleri istemek için bayt aralığını açıklayan bir alan içerebilir Range .

  2. Uç nokta "206" durum kodu ve HTTP ileti gövdesi ile yanıt verir.

    Bu öbekteki içerikle ilgili ayrıntılar yanıtın üst bilgisinde görünür. Logic Apps'in Content-Range öbek için başlangıç ve bitiş bilgilerini ve öbeklemeden önce içeriğin tamamının toplam boyutunu belirlemesine yardımcı olan bilgiler de buna dahildir.

  3. Mantıksal uygulamanız otomatik olarak izleme HTTP GET istekleri gönderir.

    Mantıksal uygulamanız, içeriğin tamamı alınana kadar izleme GET istekleri gönderir.

Örneğin, bu eylem tanımı üst bilgiyi ayarlayan Range bir HTTP GET isteğini gösterir. Üst bilgi, uç noktanın öbeklenmiş içerikle yanıt vermesini önerir :

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

GET isteği, "Aralık" üst bilgisini bayt aralığı olan "bytes=0-1023" olarak ayarlar. Uç nokta kısmi içerik isteklerini destekliyorsa, uç nokta istenen aralıktan bir içerik öbekleriyle yanıt verir. Uç noktaya bağlı olarak, "Aralık" üst bilgi alanının tam biçimi farklı olabilir.

Öbekler halinde içerik yükleme

Bir HTTP eyleminden öbeklenmiş içeriği karşıya yüklemek için eylemin özelliği aracılığıyla runtimeConfiguration öbek desteğini etkinleştirmiş olması gerekir. Bu ayar, eylemin öbek protokollerini başlatmasına izin verir. Mantıksal uygulamanız daha sonra hedef uç noktaya bir ilk POST veya PUT iletisi gönderebilir. Uç nokta önerilen öbek boyutuyla yanıt verdikten sonra mantıksal uygulamanız, içerik öbeklerini içeren HTTP PATCH istekleri göndererek bunu izler.

Aşağıdaki adımlarda Logic Apps'in mantıksal uygulamanızdan uç noktaya öbeklenmiş içerik yüklemek için kullandığı ayrıntılı işlem açıklanmaktadır:

  1. Mantıksal uygulamanız, boş bir ileti gövdesiyle ilk HTTP POST veya PUT isteğini gönderir. İstek üst bilgisi, mantıksal uygulamanızın öbekler halinde yüklemek istediği içerik hakkında aşağıdaki bilgileri içerir:

    Logic Apps istek üst bilgisi alanı Değer Tür Açıklama
    x-ms-transfer-mode Yığın Dize İçeriğin öbekler halinde karşıya yüklendiğini gösterir
    x-ms-content-length <içerik uzunluğu> Tamsayı Öbeklemeden önce bayt cinsinden içerik boyutunun tamamı
  2. Uç nokta "200" başarı durum kodu ve aşağıdaki bilgilerle yanıt verir:

    Uç nokta yanıtı üst bilgi alanı Tür Gerekli Açıklama
    Konum Dize Yes HTTP PATCH iletilerinin gönderileceği URL konumu
    x-ms-chunk-size Tamsayı No Bayt cinsinden önerilen öbek boyutu
  3. Mantıksal uygulamanız, her birinde aşağıdaki bilgileri içeren izleme HTTP PATCH iletileri oluşturur ve gönderir:

    • x-ms-chunk-size tabanlı bir içerik öbeği veya x-ms-content-length toplamını alan tüm içerik sırayla karşıya yüklenene kadar dahili olarak hesaplanan bir boyut

    • Her PATCH iletisinde gönderilen içerik öbekleri hakkında aşağıdaki üst bilgi bilgileri:

      Logic Apps istek üst bilgisi alanı Değer Tür Açıklama
      İçerik Aralığı <Aralığı> Dize Geçerli içerik öbeği için başlangıç değeri, bitiş değeri ve toplam içerik boyutu dahil bayt aralığı; örneğin: "bytes=0-1023/10100"
      İçerik Türü <içerik türü> Dize Öbeklenmiş içeriğin türü
      İçerik Uzunluğu <içerik uzunluğu> Dize Geçerli öbek bayt cinsinden boyut uzunluğu
  4. Her PATCH isteğinden sonra uç nokta, "200" durum kodu ve aşağıdaki yanıt üst bilgileriyle yanıt vererek her öbeğin alındı bilgisini onaylar:

    Uç nokta yanıtı üst bilgi alanı Tür Gerekli Açıklama
    Aralık Dize Yes Uç nokta tarafından alınan içeriğin bayt aralığı, örneğin: "bytes=0-1023"
    x-ms-chunk-size Tamsayı No Bayt cinsinden önerilen öbek boyutu

Örneğin, bu eylem tanımı bir uç noktaya öbeklenmiş içerik yüklemek için bir HTTP POST isteği gösterir. Eylemin runTimeConfiguration özelliğinde contentTransfer özelliği olarak chunkedayarlartransferMode:

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