Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku pada: Azure Logic Apps (Konsumsi)
Azure Logic Apps memiliki batas maksimum yang berbeda pada ukuran konten pesan yang dapat ditangani pemicu dan tindakan dalam alur kerja aplikasi logika, berdasarkan jenis sumber daya aplikasi logika dan lingkungan tempat alur kerja aplikasi logika tersebut berjalan. Batas ini membantu mengurangi overhead apa pun yang dihasilkan dari penyimpanan dan pemrosesan 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 pemotongan, yang membagi pesan besar menjadi pesan yang lebih kecil. Dengan begitu, Anda masih dapat mentransfer file besar dalam kondisi tertentu. Sebenarnya, ketika Anda menggunakan tindakan HTTP bawaan atau tindakan konektor terkelola tertentu ini, penguraian adalah satu-satunya cara agar Azure Logic Apps dapat mengonsumsi pesan berukuran besar. Persyaratan ini berarti bahwa pertukaran pesan HTTP yang mendasar antara Azure Logic Apps dan layanan lain harus menggunakan penggugusan, atau bahwa koneksi yang dibuat oleh konektor terkelola yang ingin Anda gunakan juga harus mendukung penggugusan.
Nota
Azure Logic Apps tidak mendukung pemecahan pada pemicu karena adanya peningkatan beban dari pertukaran banyak pesan. Selain itu, Azure Logic Apps menerapkan pemotongan untuk tindakan HTTP menggunakan protokolnya sendiri seperti yang dijelaskan dalam artikel ini. Jadi, bahkan jika situs web atau layanan web Anda mendukung pengelompokan, mereka tidak akan berfungsi dengan pengelompokan aksi HTTP. Untuk menggunakan pemotongan tindakan HTTP dengan situs web atau layanan web, 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 pemecahan menjadi bagian-bagian di Azure Logic Apps dan cara menyiapkan pemecahan menjadi bagian-bagian untuk tindakan yang didukung.
Apa yang membuat pesan "besar"?
Pesan dianggap "besar" bergantung pada layanan yang menangani pesan tersebut. Batas ukuran spesifik untuk pesan besar berbeda di antara Azure Logic Apps dan konektor. Azure Logic Apps dan konektor tidak dapat langsung menggunakan pesan besar, yang harus dipotong. Untuk batas ukuran pesan Azure Logic Apps, lihat Batas dan konfigurasi Azure Logic Apps. Untuk batas ukuran pesan setiap konektor, lihat dokumentasi referensi konektor.
Penanganan pesan terpotong untuk Azure Logic Apps
Azure Logic Apps tidak dapat langsung menggunakan output dari pesan yang dipotong yang lebih besar dari batas ukuran pesan. Hanya tindakan yang mendukung pemecahan segmen yang dapat mengakses konten pesan dalam output ini. Jadi, tindakan yang menangani pesan besar harus memenuhi salah satu kriteria ini:
Tindakan harus secara bawaan mendukung chunking ketika tindakan tersebut merupakan bagian dari konektor.
Tindakan harus mengaktifkan dukungan penggugusan dalam konfigurasi runtime tindakan tersebut.
Jika tidak, Anda mendapatkan kesalahan runtime saat mencoba mengakses output konten besar. Untuk mengaktifkan pemecahan, lihat Mengatur dukungan pemecahan.
Penanganan pesan bersegmentasi untuk perangkat penghubung
Layanan yang berkomunikasi dengan Azure Logic Apps dapat memiliki batas ukuran pesan mereka sendiri. Batas ini sering lebih kecil dari batas Azure Logic Apps. Misalnya, jika diasumsikan bahwa konektor mendukung pemrosesan data dalam bagian-bagian kecil (chunking), konektor mungkin menganggap pesan 30 MB sebagai besar, sementara Azure Logic Apps tidak demikian. Untuk mematuhi batas konektor ini, Azure Logic Apps membagi pesan apa pun yang lebih besar dari 30 MB menjadi gugus yang lebih kecil.
Untuk konektor yang mendukung pemotongan, protokol pemotongan yang mendasar tidak tampak bagi pengguna akhir. Namun, tidak semua konektor mendukung pemotongan, sehingga konektor ini menghasilkan kesalahan runtime saat pesan masuk melebihi batas ukuran konektor.
Untuk tindakan yang mendukung dan memungkinkan pencacahan, Anda tidak dapat menggunakan isi pemicu, variabel, dan ekspresi seperti triggerBody()?['Content']
karena penggunaan input ini mencegah operasi pencacahan terjadi. Sebagai gantinya, gunakan aksi ' Compose'. Secara khusus, Anda harus membuat body
bidang dengan menggunakan aksi Compose untuk menyimpan output data dari tubuh pemicu, variabel, ekspresi, dan sebagainya, misalnya:
"Compose": {
"inputs": {
"body": "@variables('myVar1')"
},
"runAfter": {
"Until": [
"Succeeded"
]
},
"type": "Compose"
},
Untuk merujuk ke data, dalam aksi chunking, gunakan ekspresi body('Compose')
, misalnya:
"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 dan titik akhir Anda dapat bertukar pesan besar. Namun, Anda harus membagi pesan sesuai dengan yang diharapkan oleh Azure Logic Apps.
Jika titik akhir telah mengaktifkan pembagian untuk pengunduhan atau pengunggahan, tindakan HTTP di aplikasi logika Anda secara otomatis membagi pesan besar. Jika tidak, Anda harus menyiapkan dukungan potongan pada titik akhir. Jika Anda tidak memiliki atau mengontrol titik akhir atau konektor, Anda mungkin tidak memiliki opsi untuk pengaturan chunking.
Selain itu, jika tindakan HTTP belum mengaktifkan pemotongan, Anda juga harus menyiapkan pemotongan di properti tindakan runTimeConfiguration
.
Anda dapat mengatur properti ini di dalam tindakan, baik langsung di editor tampilan kode seperti yang dijelaskan nanti, atau di perancang alur kerja seperti yang dijelaskan di sini:
Di sudut kanan atas tindakan HTTP, pilih tombol elipsis (...), lalu pilih Pengaturan.
Di bawah Transfer Konten, atur Izinkan pembagian ke Aktif.
Untuk melanjutkan pengaturan pemecahan berkas untuk unduhan atau unggahan, lanjutkan dengan bagian berikut.
Mengunduh konten dalam gugus
Banyak titik akhir secara otomatis mengirim pesan besar dalam gugus saat 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. Saat 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. Azure Logic Apps tidak dapat mengontrol apakah titik akhir mendukung permintaan parsial. Namun, saat 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 Accept-Ranges
header.
Dengan begitu, jika titik akhir mendukung unduhan yang dipotong tetapi tidak mengirim konten yang dipotong, Anda dapat menyarankan opsi ini dengan mengatur Range
header dalam permintaan HTTP GET Anda.
Langkah-langkah ini menjelaskan proses terperinci yang digunakan Azure Logic Apps untuk mengunduh konten yang dipotong dari titik akhir ke alur kerja Anda:
Alur kerja Anda mengirimkan permintaan HTTP GET ke titik akhir.
Header permintaan dapat secara opsional menyertakan
Range
bidang yang menjelaskan rentang byte untuk meminta potongan konten.Titik akhir merespons dengan kode status "206" dan isi pesan HTTP.
Detail tentang konten dalam gugus ini muncul di header respons
Content-Range
. Detail ini mencakup informasi yang membantu Azure Logic Apps menentukan awal dan akhir untuk gugus, ditambah ukuran total seluruh konten sebelum pemotongan.Aplikasi logika Anda secara otomatis mengirim permintaan HTTP GET tindak lanjut.
Aplikasi logika Anda mengirim permintaan GET tindak lanjut hingga seluruh konten diambil.
Misalnya, definisi tindakan ini menunjukkan permintaan HTTP GET yang mengatur Range
header.
Header menyarankan bahwa titik akhir harus merespons dengan 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 dengan potongan konten dari rentang yang diminta. Berdasarkan titik akhir, format yang tepat untuk bidang header "Rentang" dapat berbeda.
Mengunggah konten dalam gugus
Untuk mengunggah konten yang dipotong dari tindakan HTTP, tindakan harus mengaktifkan dukungan pemotongan melalui properti tindakan runtimeConfiguration
.
Pengaturan ini mengizinkan tindakan untuk memulai protokol pemecahan.
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 terperinci yang digunakan Azure Logic Apps untuk mengunggah konten yang dipotong dari aplikasi logika Anda ke titik akhir:
Alur kerja Anda mengirimkan permintaan HTTP POST atau PUT awal dengan isi pesan kosong.
Header permintaan menyertakan informasi berikut tentang konten yang ingin diunggah aplikasi logika Anda dalam gugus:
Bidang header permintaan Nilai Tipe Deskripsi x-ms-transfer-mode dipotong string Menunjukkan bahwa konten diunggah dalam gugus x-ms-content-length < panjang konten> Integer Seluruh ukuran konten dalam byte sebelum memotong Titik akhir merespons dengan kode status keberhasilan "200" dan informasi berikut:
Bidang header respons untuk titik akhir Tipe Diperlukan Deskripsi Location string Ya Lokasi URL tempat mengirim pesan PATCH HTTP x-ms-chunk-size Integer Tidak. Ukuran potongan yang disarankan dalam byte Alur kerja Anda membuat dan mengirim pesan HTTP PATCH tindak lanjut - masing-masing dengan informasi berikut:
Potongan konten berdasarkan x-ms-chunk-size atau beberapa ukuran yang dihitung secara internal sampai semua konten yang totalnya x-ms-content-length diunggah secara berurutan
Informasi header berikut tentang potongan konten yang dikirim di setiap pesan PATCH:
Bidang header permintaan Nilai Tipe Deskripsi Content-Range < rentang> string Rentang byte untuk potongan konten saat ini, termasuk nilai awal, nilai akhir, dan ukuran konten total, misalnya: "byte=0-1023/10100" Content-Type < tipe konten> string Jenis konten yang dipotong Content-Length < panjang konten> string Panjang ukuran dalam byte dari potongan saat ini
Setelah setiap permintaan PATCH, titik akhir mengonfirmasi tanda terima untuk setiap gugus dengan merespons dengan kode status "200" dan header respons berikut:
Bidang header respons titik akhir Tipe Diperlukan Deskripsi Rentang string Ya Rentang byte untuk konten yang telah diterima oleh endpoint, misalnya: "bytes=0-1023" x-ms-chunk-size Integer Tidak. Ukuran potongan yang disarankan dalam byte
Misalnya, definisi tindakan ini menunjukkan permintaan HTTP POST untuk mengunggah konten yang dipotong ke titik akhir. Dalam properti tindakan runTimeConfiguration
, properti contentTransfer
mengatur transferMode
menjadi chunked
.
"postAction": {
"runtimeConfiguration": {
"contentTransfer": {
"transferMode": "chunked"
}
},
"inputs": {
"method": "POST",
"uri": "http://myAPIendpoint/api/action",
"body": "@body('getAction')"
},
"runAfter": {
"getAction": ["Succeeded"]
},
"type": "Http"
}