JBoss Fuse - Konsep Unta
Dalam bab ini, kita akan memahami berbagai Konsep Unta. Mari kita mulai dengan mengambil contoh dasar untuk memahami konsep inti.
CamelContext
Setiap aplikasi unta memiliki setidaknya satu CamelContext. Ini adalah tempat kami menambahkan rute unta. Ini mirip denganApplicationContext Musim Semi.
Konteks unta dapat diartikan sebagai wadah yang menyatukan semua hal. Satu konteks unta dapat memiliki banyak rute di dalamnya.
Rute
CamelContext mungkin berisi satu atau lebih rute. Rute adalah logika integrasi yang menentukan bagaimana data akan mengalir dalam konteks unta dari satu titik akhir ke titik lainnya.
Titik akhir
Endpoint adalah akhir saluran di mana sistem dapat mengirim atau menerima pesan. Inilah yang kita sebut sebagai tujuan atau sumber dalam bahasa komunikasi.
Komponen
Komponen adalah titik perluasan di Camel. Komponen dapat menjadi antarmuka ke teknologi, format data, transformator, dll. Mereka juga dapat bertindak sebagai pabrik untuk titik akhir.
EIP
EIP adalah singkatan dari Enterprise Integration Pattern. Ini diidentifikasi dan solusi terkenal untuk masalah yang berulang. Camel mendukung sebagian besar Pola Integrasi Perusahaan.
Router Berbasis Konten
Pola CBR memungkinkan kita untuk merutekan data sesuai dengan konten file input.
Pola ini digunakan ketika kita harus merutekan nilai tergantung pada isi dari input.
Contoh berikut akan membaca data dari D:/data/inputdirektori. Setelah membaca, itu akan memeriksa tag nilai di dalam tag data. Jika tag nilai berisivalue1, itu akan dikirim ke D:/value1, Jika berisi value2, itu akan dikirim ke D:/value2 dan jika tidak satupun dari keduanya, maka akan dikirimkan ke orang lain.
<CamelContext xmlns = "http://camel.apache.org/schema/spring">
<route>
<from uri = "file:///D:/data/input"/>
<choice>
<when>
<xpath>/data/value = 'value1'</xpath>
<to uri = "file:///D:/value1"/>
</when>
<when>
<xpath>/data/value = 'value2'</xpath>
<to uri = "file:///D:/value2"/>
</when>
<otherwise>
<to uri = "file:///D:/others "/>
</otherwise>
</choice>
</route>
</camelContext>
Input
D: /data/input/message1.xml
<data>
<value>value1</value>
</data>
D: /data/input/message2.xml
<data>
<value>value2</value>
</data>
Output
D: / nilai1 /
<data>
<value>value1</value>
</data>
D: / nilai2 /
<data>
<value>value2</value>
</data>
Pembelah
Pola pemisah digunakan untuk membagi data masukan menjadi beberapa bagian yang lebih kecil.
Pola ini digunakan sebagian besar waktu dengan input data yang sangat besar yang perlu dipecah menjadi beberapa bagian, sehingga dapat diproses. Ini memecah input menjadi fragmen yang lebih kecil berdasarkan string token input.
<CamelContext xmlns = "http://camel.apache.org/schema/spring">
<route>
<from uri = "file:///D:/inbox"/>
<split streaming = "true">
<tokenize token = "order" xml = "true"/>
<to uri = "activemq:queue:order"/>
</split>
</route>
</CamelContext>
Input
D: /inbox/message.xml
<order>
<data>
<value>value1</value>
</data>
</order>
<order>
<data>
<value>value2</value>
</data>
</order>
<order>
<data>
<value>value3</value>
</data>
</order>
Output
Jika Anda memeriksa AMQ, Anda akan menemukan 3 pesan yang diposting.
<order>
<data>
<value>value4</value>
</data>
</order>
Daftar Penerima
Pola daftar penerima digunakan ketika daftar penerima perlu diambil dari badan pesan itu sendiri.
Dalam contoh berikut, pesan akan dikirim ke semua penerima yang terdaftar di tag pelanggan sebagai daftar string yang dipisahkan koma.
<CamelContext xmlns = "http://camel.apache.org/schema/spring">
<route>
<from uri = "jms:xmlOrders" />
<recipientList>
<xpath>/order/customer</xpath>
</recipientList>
</route>
</camelContext>
EIP lainnya
Camel memberikan dukungan kepada hampir semua EIP yang diidentifikasi. Beberapa EIP yang umum digunakan adalah seperti yang disebutkan di bawah ini.
Log - Untuk mencatat pesan lengkap atau sebagian darinya
Message Filter - Memfilter konten pesan
Re-Sequencer - Untuk mendapatkan semua token secara berurutan
Wiretap - Untuk memeriksa pesan perjalanan
Daftar lengkap EIP dan penggunaannya dapat ditemukan di dokumentasi resmi Camel http://camel.apache.org/eip.html
Penanganan Pengecualian pada Unta
Using Error Handler - Ini adalah cara termudah untuk menangani pengecualian pada unta.
Untuk menggunakan ini, kita harus mengkonfigurasi kacang kelas penanganan Kesalahan dan menyediakannya sebagai referensi CamelContext errorHandlerRef atribut.
<bean id = "loggingErrorHandler" class = "org.apache.camel.builder.LoggingErrorHandler">
<property name = "logName" value = "mylogger.name"/>
<property name = "level" value = "DEBUG"/>
</bean>
<camelContext errorHandlerRef = ” loggingErrorHandler” >
…
</camelContext>
Menggunakan Try Catch Akhirnya
Unta juga mendukung gaya Java Try Catch Finally block untuk penanganan kesalahan.
Sama seperti Java, ia memiliki tiga blok berikut -
doTry blok berisi kode yang dapat menghasilkan pengecualian.
doCatch blok berisi kode yang perlu dijalankan jika ada pengecualian.
doFinallyblok memiliki kode yang harus dijalankan terlepas dari pengecualian. Itu akan selalu dijalankan tidak peduli apakah pengecualian dimunculkan atau tidak.
Note- Mock adalah komponen pengujian dan tidak direkomendasikan untuk tujuan lain. Ini adalah komponen dalam unta yang digunakan untuk pengujian seperti komponen jMOck dalam pengembangan yang digerakkan oleh Uji.
<route>
<from uri = "direct:start"/>
<doTry>
<process ref = "someProcesorThatmayFail"/>
<to uri = "mock:result"/>
<doCatch>
<exception>java.io.IOException</exception>
<exception>java.lang.IllegalStateException</exception>
<to uri = "mock:catch"/>
</doCatch>
<doFinally>
<to uri = "mock:finally"/>
</doFinally>
</doTry>
</route>
Dalam contoh di atas, kita bisa memberikan daftar pengecualian yang perlu ditangani oleh blok catch.
Menerapkan Bundel di Fuse
Mulai Fuse menggunakan Fuse.bat/start.bat.
Jika Anda memulai Fuse menggunakan start.bat, gunakan client.bat untuk menyambung ke Fuse. Anda harus mendapatkan UI seperti yang ditunjukkan pada tangkapan layar berikut.
Ini adalah CLI untuk mengakses perintah Karaf dan Fuse.
install –s mvn:group.id /artifact.id/version
e.g. install –s mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT