Bagikan melalui


Cara Adapter Menangani Pesan Besar

BizTalk Messaging Engine dapat memproses pesan yang sangat besar dan tidak memberlakukan batasan pada ukuran maksimum pesan. Namun, Anda harus mempertimbangkan batasan ukuran pesan untuk mempertahankan performa optimal dan manajemen sumber daya. Karena ukuran pesan meningkatkan jumlah pesan yang diproses per detik berkurang. Pertimbangkan ukuran pesan rata-rata, jenis pesan, dan jumlah pesan yang sedang diproses oleh BizTalk Server saat merancang skenario dan perencanaan kapasitas Anda.

Pemrosesan Stream-Based

Penting untuk mengingat penanganan pesan besar saat mengembangkan adaptor. Memuat seluruh aliran data ke dalam memori terlepas dari ukurannya sangat tidak disarankan karena ini berpotensi menghentikan proses BizTalk Server. Tergantung pada ukuran dan jumlah pesan yang diproses mesin pada waktu tertentu, memori virtual yang rendah bisa menjadi masalah. Sebaliknya, pesan harus diproses dengan cara streaming sebagai berikut:

  • Pesan masuk. Untuk pesan masuk, aliran jaringan dilampirkan ke pesan BizTalk oleh adaptor terima meninggalkan "menarik" aliran ke BizTalk Messaging Engine.

  • Pesan keluar. Untuk pesan keluar, adaptor bertanggung jawab untuk menarik aliran. Ini secara efektif menarik aliran dari database MessageBox dan melalui alur kirim. Adaptor harus mengirim data melalui kawat dengan cara streaming.

    Gambar berikut menunjukkan pemrosesan berbasis aliran di sisi penerimaan Mesin Olahpesan.

    Gambar yang menunjukkan pemrosesan berbasis aliran di sisi penerimaan Mesin Olahpesan.

    Ketika adaptor mengirimkan pesan ke mesin, adaptor harus melampirkan aliran datanya ke pesan BizTalk. Untuk beberapa adaptor, ini mungkin berarti mengimplementasikan aliran jaringan. Ketika pesan dikirimkan, mesin menjalankan alur penerima. Selama eksekusi alur, komponen alur yang ingin mengubah klon data pesan, menghubungkan aliran dari pesan baru ke aliran pada pesan sebelumnya. Setelah alur dijalankan, Mesin Olahpesan mengambil pesan dari alur dan menjalankan perulangan membaca aliran pada pesan tersebut. Pembacaan aliran ini memanggil bacaan pada aliran sebelumnya, yang pada gilirannya memanggil bacaan pada aliran sebelumnya, dan sebagainya kembali ke aliran jaringan. Mesin secara berkala membersihkan data ke MessageBox untuk mempertahankan model memori datar.

    Tips Pemecahan Masalah: Di sisi kirim, adaptor bertanggung jawab untuk membaca aliran. Jika adaptor kirim ingin membaca properti konteks pesan apa pun yang dipromosikan atau ditulis dalam alur kirim, properti ini mungkin tidak ditulis sampai seluruh aliran dibaca. Hanya ketika aliran telah benar-benar dibaca dapat adaptor memastikan bahwa semua komponen alur telah selesai dieksekusi.

Menemukan Byte Tertentu di Aliran

Ada skenario di mana adaptor mungkin perlu menemukan aliran kembali ke awal untuk menangani pesan gagal yang perlu ditangguhkan. Contohnya adalah adaptor HTTP yang menerima data menggunakan pengodean yang dipotong untuk mengirimkan pesan respons dalam pasangan respons yang diminta.

Namun, dalam banyak skenario Anda mungkin tidak dapat melacak aliran data. Misalnya, pertimbangkan adaptor HTTP yang menerima data menggunakan pengodean yang dipotong. Agar aliran data dirancang sehingga Anda dapat menemukan pesan yang gagal, adaptor perlu menyimpan data saat dibaca, baik dalam memori atau ke disk. Jelas ini tidak optimal dan membutuhkan sumber daya tambahan. Selanjutnya, banyak komponen alur out-of-the-box beroperasi dengan cara streaming khusus maju. Untuk skenario ini, BaseAdapter di SDK menggunakan kelas pembantu yang disebut VirtualStream. File yang berisi fungsionalitas ini bernama VirtualStream.cs.

Catatan

File VirtualStream.cs terletak di dua lokasi di bawah Sampel SDK Alur—SDK\Samples\Pipelines\ArbitraryXPathPropertyHandler dan SDK\Samples\Pipelines\SchemaResolverComponent\SchemaResolverFlatFileDasm.

Ide di balik aliran virtual adalah bahwa data dalam aliran di-cache dalam aliran memori sampai mencapai ambang batas, di mana data meluap ke lokasi aman pada disk. Setelah aliran ditutup, file disk akan dihapus secara otomatis. Aliran hanya maju dapat dirancang dengan cara ini.