Menangani pesan besar dalam alur kerja menggunakan chunking di Azure Logic Apps
Berlaku pada: Azure Logic Apps (Konsumsi)
Azure Logic Apps memiliki batas maksimum yang berbeda pada ukuran konten pesan yang dipicu dan dapat ditangani oleh tindakan dalam alur kerja aplikasi logika, berdasarkan jenis sumber daya aplikasi logika dan lingkungan tempat alur kerja aplikasi logika tersebut berjalan. Batas-batas ini membantu mengurangi overhead yang dihasilkan dari menyimpan dan memproses pesan besar. Untuk informasi selengkapnya tentang batas ukuran pesan, tinjau Batas pesan di Azure Logic Apps.
Jika Anda menggunakan tindakan HTTP bawaan atau tindakan konektor terkelola tertentu, dan Anda memerlukan Azure Logic Apps untuk bekerja dengan pesan yang lebih besar dari batas default, Anda dapat mengaktifkan chunking, yang membagi pesan besar menjadi pesan lebih kecil. Dengan begitu, Anda masih dapat mentransfer file besar dalam kondisi tertentu. Bahkan, ketika Anda menggunakan tindakan HTTP bawaan ini atau tindakan konektor terkelola tertentu, chunking adalah satu-satunya cara Azure Logic Apps dapat mengonsumsi pesan besar. Persyaratan ini berarti bahwa pertukaran pesan HTTP yang mendasari antara Azure Logic Apps dan layanan lainnya harus menggunakan chunking, atau bahwa koneksi yang dibuat oleh konektor terkelola yang ingin Anda gunakan juga harus mendukung chunking.
Catatan
Azure Logic Apps tidak mendukung chunking pada pemicu karena peningkatan overhead dari bertukar beberapa pesan. Selain itu, Azure Logic Apps menerapkan chunking untuk tindakan HTTP menggunakan protokol sendiri seperti yang dijelaskan dalam artikel ini. Jadi, bahkan jika situs web atau layanan web Anda mendukung chunking, mereka tidak akan bekerja dengan chunking tindakan HTTP. Untuk menggunakan chunking tindakan HTTP dengan situs web atau layanan web Anda, Anda harus menerapkan protokol yang sama yang digunakan oleh Azure Logic Apps. Jika tidak, jangan aktifkan chunking pada tindakan HTTP.
Artikel ini memberikan gambaran umum tentang cara kerja chunking dalam Azure Logic Apps dan cara mengatur chunking pada tindakan yang didukung.
Apa yang membuat pesan "besar"?
Pesan "besar" berdasarkan layanan yang menangani pesan tersebut. Batas ukuran yang tepat pada pesan besar berbeda di antara Logic Apps dan konektor. Baik Logic Apps dan konektor tidak dapat langsung mengkonsumsi pesan besar, yang harus dipotong. Untuk batas ukuran pesan Logic Apps, lihat Batas dan konfigurasi Logic Apps. Untuk batas ukuran pesan setiap konektor, lihat dokumentasi referensi konektor.
Penanganan pesan yang telah dipotong untuk Logic Apps
Logic Apps tidak dapat secara langsung menggunakan output dari pesan potongan yang lebih besar dari batas ukuran pesan. Hanya tindakan yang mendukung pemotongan yang dapat mengakses konten pesan dalam output ini. Jadi, tindakan yang menangani pesan besar harus memenuhi salah satu kriteria ini:
- Secara asli mendukung pemotongan ketika tindakan itu milik konektor.
- Mengaktifkan dukungan pemotongan dalam konfigurasi runtime tindakan tersebut.
Jika tidak, Anda mendapatkan kesalahan runtime saat mencoba mengakses output konten besar. Untuk mengaktifkan potongan, lihat Menyiapkan dukungan potongan.
Penanganan pesan yang telah dipotong untuk konektor
Layanan yang berkomunikasi dengan Logic Apps dapat memiliki batas ukuran pesan mereka sendiri. Batas ini sering lebih kecil dari batas Logic Apps. Misalnya, dengan asumsi bahwa konektor mendukung potongan, konektor mungkin menganggap pesan 30-MB sebagai besar, sementara Logic Apps tidak. Untuk mematuhi batas konektor ini, Logic Apps membagi pesan apa pun yang lebih besar dari 30 MB menjadi potongan yang lebih kecil.
Untuk konektor yang mendukung pemotongan, protokol chunking yang mendasarinya tidak terlihat oleh pengguna akhir. Namun, tidak semua konektor mendukung pemotongan, sehingga konektor ini menghasilkan kesalahan runtime ketika pesan masuk melebihi batas ukuran konektor.
Untuk tindakan yang mendukung dan diaktifkan untuk chunking, Anda tidak dapat menggunakan badan pemicu, variabel, dan ekspresi seperti @triggerBody()?['Content']
karena menggunakan salah satu input ini mencegah operasi pemotongan terjadi. Sebagai gantinya, gunakan tindakanTulis. Secara khusus, Anda harus membuat bidang body
dengan menggunakan tindakan Tulis untuk menyimpan output data dari isi pemicu, variabel, ekspresi, dan sebagainya, sebagai contohnya:
"Compose": {
"inputs": {
"body": "@variables('myVar1')"
},
"runAfter": {
"Until": [
"Succeeded"
]
},
"type": "Compose"
},
Kemudian, untuk mereferensikan data, dalam tindakan pemotongan, gunakan @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"
},
Menyiapkan pemotongan melalui HTTP
Dalam skenario HTTP generik, Anda dapat membagi unduhan dan unggahan konten besar melalui HTTP, sehingga aplikasi logika Anda dan titik akhir dapat bertukar pesan besar. Namun, Anda harus memotong pesan dengan cara yang diharapkan Logic Apps.
Jika titik akhir telah mengaktifkan pemotongan untuk unduhan atau unggahan, tindakan HTTP di aplikasi logika Anda secara otomatis memotong pesan besar. Jika tidak, Anda harus menyiapkan dukungan pemotongan di titik akhir. Jika Anda tidak memiliki atau mengontrol titik akhir atau konektor, Anda mungkin tidak memiliki opsi untuk menyiapkan pemotongan.
Selain itu, jika tindakan HTTP belum mengaktifkan pemotongan, Anda juga harus menyiapkan pemotongan di properti runTimeConfiguration
tindakan.
Anda dapat mengatur properti ini di dalam tindakan, baik langsung di editor tampilan kode seperti yang dijelaskan nanti, atau di Logic Apps Designer seperti yang dijelaskan di sini:
Di sudut kanan atas tindakan HTTP, pilih tombol elipsis ( ... ), lalu pilih Pengaturan.
Di bawahTransfer Konten, atur Izinkan pemotongan ke Aktif.
Untuk terus menyiapkan pemotongan untuk unduhan atau unggahan, lanjutkan dengan bagian berikut.
Unduh konten dalam potongan
Banyak titik akhir secara otomatis mengirim pesan besar dalam potongan ketika diunduh melalui permintaan HTTP GET. Untuk mengunduh pesan yang dipotong dari titik akhir melalui HTTP, titik akhir harus mendukung permintaan konten parsial, atau unduhan yang dipotong. Ketika aplikasi logika Anda mengirim permintaan HTTP GET ke titik akhir untuk mengunduh konten, dan titik akhir merespons dengan kode status "206", respons berisi konten yang dipotong. Logic Apps tidak dapat mengontrol apakah titik akhir mendukung permintaan parsial. Namun, ketika aplikasi logika Anda mendapatkan respons "206" pertama, aplikasi logika Anda secara otomatis mengirim beberapa permintaan untuk mengunduh semua konten.
Untuk memeriksa apakah titik akhir dapat mendukung konten parsial, kirim permintaan HEAD. Permintaan ini membantu Anda menentukan apakah respons berisi header Accept-Ranges
.
Dengan demikian, jika titik akhir mendukung unduhan yang dipotong tetapi tidak mengirim konten yang dipotong, Anda dapatmenyarankan opsi ini dengan memasang header Range
di permintaan HTTPGET Anda.
Langkah-langkah ini menjelaskan proses terperinci yang digunakan Logic Apps untuk mengunduh konten yang dipotong dari titik akhir ke aplikasi logika Anda:
Aplikasi logika Anda mengirim permintaan HTTP GET ke titik akhir.
Header permintaan dapat secara opsional menyertakan bidang
Range
yang menjelaskan rentang byte untuk meminta potongan konten.Titik akhir merespons dengan kode status "206" dan isi pesan HTTP.
Detail tentang konten dalam potongan ini muncul di header
Content-Range
respons, termasuk informasi yang membantu Aplikasi Logika menentukan awal dan akhir untuk potongan, ditambah ukuran total seluruh konten sebelum potongan.Aplikasi logika Anda secara otomatis mengirimkan permintaan HTTP GET tindak lanjut.
Aplikasi logika Anda mengirimkan permintaan GET tindak lanjut hingga seluruh konten diambil.
Sebagai contoh, definisi tindakan ini memperlihatkan permintaan HTTP GET yang mengatur header Range
.
Header menunjukkan bahwa titik akhir harus merespons konten yang dipotong:
"getAction": {
"inputs": {
"headers": {
"Range": "bytes=0-1023"
},
"method": "GET",
"uri": "http://myAPIendpoint/api/downloadContent"
},
"runAfter": {},
"type": "Http"
}
Permintaan GET mengatur header "Rentang" ke "bytes=0-1023", yang merupakan rentang byte. Jika titik akhir mendukung permintaan untuk konten parsial, titik akhir merespons potongan konten dari rentang yang diminta. Berdasarkan titik akhir, format yang tepat untuk bidang header "Rentang" dapat berbeda.
Unduh konten dalam potongan
Untuk mengunggah konten yang dipotong dari tindakan HTTP, tindakan harus mengaktifkan dukungan pemotongan melalui properti runtimeConfiguration
tindakan.
Pengaturan ini memungkinkan tindakan untuk memulai protokol pemotongan.
Aplikasi logika Anda kemudian dapat mengirim pesan POST atau PUT awal ke titik akhir target.
Setelah titik akhir merespons dengan ukuran potongan yang disarankan, aplikasi logika Anda menindaklanjuti dengan mengirim permintaan HTTP PATCH yang berisi potongan konten.
Langkah-langkah berikut menjelaskan proses mendetail yang digunakan Aplikasi Logika untuk mengunggah konten yang dipotong dari aplikasi logika Anda ke titik akhir:
Aplikasi logika Anda mengirimkan permintaan HTTP POST atau PUT awal dengan isi pesan kosong. Header permintaan, menyertakan informasi berikut tentang konten yang ingin diunggah oleh aplikasi logika Anda dalam potongan:
Bidang header permintaan Logic Apps Nilai Jenis Deskripsi x-ms-transfer-mode dipotong Untai Menunjukkan bahwa konten diunggah dalam potongan x-ms-content-length < content-length> Bilangan bulat Seluruh ukuran konten dalam byte sebelum pemotongan Titik akhir merespons dengan kode status sukses "200" dan informasi berikut:
Bidang header respons titik akhir Jenis Diperlukan Deskripsi Lokasi Untai Ya Lokasi URL tempat mengirim pesan HTTP PATCH x-ms-chunk-size Bilangan bulat Tidak Ukuran potongan yang disarankan dalam byte Aplikasi logika Anda membuat dan mengirim pesan HTTP PATCH tindak lanjut - masing-masing dengan informasi berikut:
Potongan konten berdasarkan ukuran x-ms-chunk atau beberapa ukuran yang terhitung secara internal hingga semua konten yang berjumlah x-ms-content-length diunggah secara berurutan
Informasi header berikut tentang potongan konten yang dikirim di setiap pesan PATCH:
Bidang header permintaan Logic Apps Nilai Jenis Deskripsi Rentang-Konten < rentang> Untai Rentang byte untuk potongan konten saat ini, termasuk nilai awal, nilai akhir, dan ukuran konten total, misalnya: "bytes=0-1023/10100" Tipe-Konten < tipekonten> Untai Tipe konten yang dipotong Panjang-Konten < panjang-konten> Untai Panjang ukuran dalam byte dari potongan saat ini
Setelah setiap permintaan PATCH, titik akhir mengonfirmasi tanda terima untuk setiap potongan dengan merespons dengan kode status "200" dan header respons berikut:
Bidang header respons titik akhir Jenis Diperlukan Deskripsi Rentang Untai Ya Rentang byte untuk konten yang telah diterima oleh titik akhir, misalnya: "bytes=0-1023" x-ms-chunk-size Bilangan bulat Tidak Ukuran potongan yang disarankan dalam byte
Sebagai contoh, definisi tindakan ini menunjukkan permintaan HTTP POST untuk mengunggah konten yang dipotong ke titik akhir. Di properti runTimeConfiguration
tindakan, properti contentTransfer
mengatur transferMode
ke chunked
:
"postAction": {
"runtimeConfiguration": {
"contentTransfer": {
"transferMode": "chunked"
}
},
"inputs": {
"method": "POST",
"uri": "http://myAPIendpoint/api/action",
"body": "@body('getAction')"
},
"runAfter": {
"getAction": ["Succeeded"]
},
"type": "Http"
}