Terbitkan dan Berlangganan Arsitektur
Dalam desain terbitkan/berlangganan, Anda memiliki tiga komponen:
Penerbit
PELANGGAN
Acara
Penerbit termasuk menerima port yang menerbitkan pesan yang tiba di lokasi penerimaan mereka, orkestrasi yang menerbitkan pesan saat mengirim pesan atau memulai orkestrasi lain secara asinkron, dan mengirim port ajakan/respons yang menerbitkan pesan saat mereka menerima respons dari aplikasi atau transportasi target.
Di BizTalk Server, ada dua jenis langganan utama: aktivasi dan instans. Langganan aktivasi adalah langganan yang menentukan bahwa pesan yang memenuhi langganan harus diaktifkan, atau dibuat, instans baru pelanggan saat diterima. Contoh hal-hal yang membuat langganan aktivasi termasuk mengirim port dengan filter atau mengirim port yang terikat ke orkestrasi, dan orkestrasi menerima bentuk yang properti Aktifkan diatur ke true. Langganan instans menunjukkan bahwa pesan yang memenuhi langganan harus dirutekan ke instans pelanggan yang sudah berjalan. Contoh hal-hal yang membuat langganan instans adalah orkestrasi dengan penerimaan yang berkorelasi dan port penerima permintaan/gaya respons menunggu respons dari BizTalk Server.
Perbedaan antara dua jenis langganan di tingkat informasi adalah bahwa langganan instans menyertakan ID instans unik, yang disimpan dalam tabel langganan di database MessageBox master. Saat instans orkestrasi atau menerima port selesai diproses, langganan instans dihapus dari MessageBox sementara langganan aktivasi tetap aktif selama orkestrasi atau port pengiriman terdaftar.
Membuat Langganan
Langganan dibuat oleh kelas layanan di BizTalk Server, yang tercantum dalam tabel adm_ServiceClass dalam database Manajemen BizTalk Server. Layanan ini termasuk layanan penembolokan; olahpesan dalam proses dan terisolasi, yang dihosting oleh Endpoint Manager; dan orkestrasi/XLANG yang dihosting oleh layanan XLANG. Masing-masing kelas layanan ini dapat membuat langganan dan menerima pesan yang diterbitkan.
Langganan adalah kumpulan pernyataan perbandingan, yang dikenal sebagai predikat, melibatkan properti konteks pesan dan nilai khusus untuk langganan. Misalnya, Jenis Pesan adalah properti konteks pesan dan banyak langganan menentukan jenis pesan dalam langganan mereka. Informasi umum tentang langganan dimasukkan ke dalam tabel langganan oleh Agen Pesan sementara predikat tertentu masuk ke salah satu tabel predikat berikut, tergantung pada jenis operasi yang ditentukan untuk langganan:
BitwiseANDPredicates
EqualsPredicates
EqualsPredicates2ndPass
ExistsPredicates
FirstPassPredicates
GreaterThanOrEqualsPredicates
GreaterThanPredicates
LessThenOrEqualsPredicates
LessThenPredicates
NotEqualsPredicates
Semua ini dicapai dengan memanggil nama aplikasi Bts_CreateSubscription_< dan prosedur tersimpan nama> aplikasi Bts_InsertPredicate_< dalam database MessageBox di mana <nama> aplikasi adalah nama host BizTalk yang membuat> langganan.
Saat port kirim terdaftar, port membuat, minimal, langganan untuk pesan apa pun dengan ID transportasi port pengiriman tersebut dalam konteks. Ini memungkinkan port pengiriman untuk selalu menerima pesan yang dimaksudkan khusus untuk itu. Ketika port orkestrasi terikat ke port pengiriman tertentu, informasi tentang pengikatan tersebut disimpan dalam database Manajemen BizTalk. Ketika pesan dikirim dari orkestrasi melalui port yang terikat ke port pengiriman fisik, ID Transportasi disertakan dalam konteks sehingga pesan dirutekan ke port pengiriman tersebut. Namun, penting untuk dicatat bahwa port pengiriman ini bukan satu-satunya port pengiriman yang dapat menerima pesan yang dikirim dari orkestrasi. Saat orkestrasi mengirim pesan, pesan tersebut diterbitkan ke MessageBox dengan semua properti yang dipromosikan yang relevan. Port pengiriman terikat dijamin menerima salinan pesan karena ID transportasi berada dalam konteks, tetapi port pengiriman lainnya, atau orkestrasi, dapat memiliki langganan yang juga cocok dengan properti pesan. Sangat penting untuk dipahami bahwa setiap kali pesan diterbitkan langsung ke MessageBox, semua pelanggan dengan langganan yang cocok akan menerima salinan pesan.
Penerbitan dan Perutean
Setelah langganan dibuat dan diaktifkan, pesan harus diterbitkan sebelum pemrosesan terjadi. Pesan diterbitkan ketika diterima ke BizTalk Server dari salah satu layanan yang disebutkan sebelumnya. Untuk diskusi perutean ini, kami akan fokus pada pesan yang diterima ke BizTalk Server melalui adaptor.
Saat pesan melalui pemrosesan alur terima, properti dipromosikan ke dalam konteks pesan. Setelah pesan siap diterbitkan ke dalam MessageBox setelah diproses oleh adaptor dan alur penerima, hal pertama yang terjadi adalah Agen Pesan menyisipkan nilai properti untuk properti yang dipromosikan dan nilai predikat dari konteks pesan ke dalam database SQL Server MessageBox master. Memiliki nilai-nilai ini dalam database memungkinkan Agen Pesan untuk membuat keputusan perutean.
Langkah selanjutnya adalah Agen Pesan meminta database MessageBox master untuk menemukan langganan untuk batch pesan saat ini yang diterbitkan. Perlu diingat bahwa pesan belum ditulis ke database, hanya properti dari konteks. Prosedur tersimpan bts_FindSubscriptions di Kotak Pesan meminta langganan dan tabel predikat yang diidentifikasi di atas, menautkannya ke properti pesan yang disimpan untuk batch pesan saat ini.
Dengan informasi ini, Agen Pesan menyisipkan pesan sekali ke setiap database MessageBox yang memiliki langganan dengan memanggil prosedur tersimpan bts_InsertMessage. Prosedur tersimpan bts_InsertMessage pertama kali dipanggil dengan ID langganan. Pada pass pertama ini, prosedur tersimpan memanggil prosedur tersimpan int_EvaluateSubscriptions yang bertanggung jawab untuk mencari informasi detail langganan, memverifikasi bahwa pesan memenuhi persyaratan keamanan untuk aplikasi dengan memeriksa bahwa predikat pesan cocok dengan properti aplikasi untuk host, dan menyisipkan referensi ke pesan dalam antrean tertentu aplikasi atau antrean khusus aplikasi yang ditangguhkan tergantung pada status. ID pesan, ID langganan, ID layanan, dan informasi langganan lainnya dimasukkan ke dalam tabel antrean khusus aplikasi untuk setiap langganan yang ditemukan untuk aplikasi ini. Setelah pesan disisipkan, properti pesan dan tabel predikat pesan dihapus dari nilai terkait batch.
Prosedur tersimpan bts_InsertMessage dipanggil kemudian untuk setiap bagian dalam pesan. Pada panggilan pertama, konteks pesan diteruskan dan kemudian dimasukkan ke dalam tabel SPOOL bersama dengan metadata tentang pesan seperti jumlah bagian, nama bagian isi, dan ID. Selain itu, bagian isi pesan dimasukkan ke dalam tabel PARTS menggunakan prosedur tersimpan int_InsertPart. Prosedur tersimpan bts_InsertMessage kemudian dipanggil untuk setiap bagian pesan yang tersisa di mana mereka hanya diteruskan ke prosedur tersimpan int_InsertPart untuk dipertahankan dalam tabel PARTS.
Saat pesan dirutekan, referensi ditambahkan untuk setiap layanan yang menerima instans pesan tertentu dan bagiannya dengan menyisipkan rekaman ke dalam tabel berikut:
MessageRefCountLog1
MessageRefCountLog2
PartRefCountLog1
PartRefCountLog2
Referensi ini mencegah pesan dan bagian dihapus oleh pekerjaan pembersihan yang berjalan secara berkala untuk menjaga MessageBox agar tidak penuh dengan data pesan untuk pesan yang tidak lagi ada dalam sistem. Dua tabel digunakan untuk mengurangi masalah ketidakcocokan dan penguncian.
Sekarang setelah pesan dirutekan ke antrean yang tepat, disimpan dalam tabel Spool dan Parts, dan direferensikan dalam antrean spesifik aplikasi, pesan harus ditarik dari antrean oleh instans aplikasi. Setiap instans host memiliki sejumlah utas antrean yang terus melakukan polling database pada interval yang dikonfigurasi dalam tabel adm_ServiceClass dalam database BizTalk Management. Tabel yang sama ini memiliki kolom untuk menunjukkan jumlah utas dequeuing yang akan digunakan. Setiap utas memanggil ke database MessageBox dan memanggil prosedur tersimpan nama> aplikasi bts_DequeueMessages_< yang sesuai untuk aplikasi host tempatnya berjalan. Prosedur tersimpan ini menggunakan semantik penguncian untuk memastikan bahwa hanya satu instans dan satu utas dequeuing yang dapat beroperasi pada pesan dalam antrean pada waktu tertentu. Instans host yang mendapatkan kunci mendapatkan pesan, dan kemudian bertanggung jawab untuk menyerahkan pesan ke layanan yang dimaksudkan.
Jika layanan yang menerima pesan adalah Endpoint Manager, maka port pengiriman dipanggil (atau bagian respons dari port penerima permintaan/respons) dan jika itu adalah subservice XLANG/s, orkestrasi dibuat, atau ditempatkan untuk melayani langganan tergantung pada apakah ada ID instans dalam langganan. Layanan kemudian merilis referensi ke pesan dan bagiannya sehingga jika tidak ada layanan lain yang memiliki referensi, data pesan dapat dihapus.