JBoss Fuse - Panduan Cepat

Dalam bab ini, kita akan mulai dengan hal-hal penting dari Enterprise Service Bus. Diberikan di bawah ini adalah penjelasan rinci tentang ESB beserta kelebihan, kekurangannya dan beberapa diagram untuk memudahkan pemahaman.

Apa itu ESB?

ESB adalah singkatan dari Enterprise Service Bus. ESB dalam bentuk yang paling sederhana adalah middleware yang bertindak sebagai jalan raya informasi yang membantu banyak aplikasi untuk berkomunikasi.

Dalam dunia perusahaan, kami mengembangkan solusi untuk banyak hal. Solusi ini mungkin menggunakan teknologi yang berbeda dan format data yang berbeda. Menjadi rumit untuk menggunakan solusi ini bersama karena varians kompatibilitas format komunikasi atau data dalam teknologi ini. Oleh karena itu diperlukan suatu teknologi yang memungkinkanloosely coupled integration di antara solusi yang berbeda ini.

ESB bertujuan untuk menyederhanakan masalah integrasi ini dengan menjadi 'HUB' yang berada di tengah-tengah semua aplikasi Anda dan memfasilitasi perutean pesan di antara mereka. ESB berfungsi sebagai mediator, bertindak sebagai jalan raya informasi, mengurus perutean transformasi data, membiarkan Coder atau Pengembang fokus pada logika aplikasinya sendiri.

Memahami ESB menjadi sangat sederhana ketika kita memahami masalah yang dirancang khusus dan solusinya menjadi mudah. Seseorang harus memiliki pemahaman yang jelas tentang bagaimana mengaktifkan banyak sistem yang berbeda, yang ditulis dalam bahasa berbeda dan berjalan pada mesin yang berbeda menggunakan format data yang berbeda untuk berbagi informasi dan membentuk platform bisnis yang terintegrasi.

Masalah Integrasi

Dalam platform perusahaan, beberapa aplikasi biasa berkolaborasi dan menyediakan fungsionalitas bisnis secara keseluruhan, tetapi integrasi aplikasi ini adalah masalah yang paling berulang. Ini menjadi semakin sulit seiring waktu seiring berkembangnya aplikasi.

Setiap aplikasi dapat memasukkan dan mengeluarkan data dalam formatnya masing-masing. Pendekatan ini berfungsi dengan baik jika jumlah aplikasi lebih sedikit, tetapi seiring dengan bertambahnya jumlah aplikasi, roda integrasi juga perlu diaduk dengan pendekatan yang lebih baik. Misalnya, jika aplikasi tertentu untuk bisnis perlu diubah, format data keluaran atau masukan untuk semua aplikasi yang memiliki ketergantungan pada aplikasi Master tersebut akan terpengaruh.

Pendekatan seperti itu berfungsi sebagai rintangan terbesar untuk Integrasi yang mengharapkan arsitektur yang digabungkan erat. Di sinilah ESB berperan. Setiap aplikasi tidak perlu berkomunikasi langsung dengan aplikasi lain; sebaliknya, semua aplikasi berkomunikasi dengan ESB dan ESB menangani perutean informasi dan konversi format data internal.

Mengapa ESB?

Berikut adalah beberapa poin yang menjelaskan mengapa Enterprise Service Bus penting.

  • ESB bertujuan untuk menyederhanakan masalah integrasi dengan aplikasi yang kompatibel dengan varian.

  • Ini bertindak sebagai Middleware, yang berfungsi sebagai mediator dari semua aplikasi Anda dan memfasilitasi perutean pesan di antara mereka.

  • Alih-alih setiap aplikasi berinteraksi dengan setiap aplikasi lain secara langsung, setiap aplikasi sekarang hanya memiliki satu antarmuka ke ESB.

  • ESB bertanggung jawab untuk menerjemahkan pesan ke / dari format umum dan merutekannya ke tujuannya.

  • Penghematan besar dalam pendekatan ini datang sebagai keuntungan jika Anda harus mengganti aplikasi yang sudah ada. Alih-alih menulis sejumlah besar antarmuka baru, Anda sekarang hanya memiliki satu antarmuka yang perlu diperhatikan (antara aplikasi Anda dan ESB).

SOA & ESB?

SOA dan ESB biasanya digunakan secara bergantian, tetapi keduanya sama sekali berbeda.

SOA adalah pola desain yang memungkinkan aplikasi untuk mengekspos fungsionalitasnya sebagai layanan melalui jaringan melalui protokol komunikasi, sedangkan ESB adalah model yang memfasilitasi komunikasi antar sistem yang berbeda, tetapi ESB dapat digunakan sebagai tulang punggung saat mengimplementasikan SOA.

JBoss Fuse adalah solusi ESB open source oleh Redhat. Ini adalah solusi perusahaan berdasarkan proyek komunitas, Apache Servicemix.

Integrasi ke Fuse

JBoss Fuse adalah platform integrasi ringan dan fleksibel yang memungkinkan integrasi cepat aplikasi perusahaan.

Fuse awalnya dikembangkan oleh Progressive software Inc. yang diakuisisi oleh Redhat pada tahun 2012. JBoss Fuse 6.1.0.redhat-379 GA adalah versi stabil dari Fuse yang dapat diunduh dari situs resminya.

Arsitektur

Fuse menggabungkan berbagai teknologi menjadi satu produk.

Komponen

Apache CXF

Apache CXF adalah framework pengembangan layanan web open source yang juga mendukung pengembangan layanan web SOAP & Rest.

Apache Camel

Apache Camel adalah kerangka kerja integrasi berbasis EIP. Pola EIP atau Integrasi Perusahaan adalah solusi yang teridentifikasi untuk masalah yang berulang dalam Integrasi Perusahaan. Solusi integrasi lengkap dapat dicapai secara meteorik dengan kombinasi pola out of the box yang telah ditentukan sebelumnya.

Ini memungkinkan untuk menulis logika perutean dalam beberapa Bahasa Khusus Domain seperti Java, Spring DSL, dan Scala dll.

Apache AMQ

Apache AMQ adalah JMS yang menyediakan sistem pesan yang andal sesuai standar JMS. Ini tidak hanya mendukung spesifikasi JMS tetapi juga menyediakan beberapa fitur menarik dan berguna yang tidak termasuk dalam spesifikasi JMS.

Apache Karaf

Apache Karaf adalah wadah OSGi ringan yang bertindak sebagai runtime untuk artefak. Apache Karaf lebih dinamis dibandingkan dengan JVM. Ini memungkinkan untuk menginstal atau menghapus modul saat runtime. Semua artefak di Fuse dikerahkan di Karaf.

Kain

Fabric menyediakan cara mudah untuk mengelola penerapan artefak di lingkungan yang luas dan terdistribusi. Ini menyediakan manajemen terpusat untuk semua beberapa contoh sekering.

Memasang Fuse

Menginstal Fuse cukup sederhana. Seperti produk JBoss lainnya, Fuse hadir sebagai file zip yang dapat diekstrak dan setelah beberapa perubahan konfigurasi kecil, Fuse dapat langsung dijalankan.

Memasang Sekring adalah proses empat langkah -

Unduh

Unduh Fuse 6.1.0 GA dari tautan berikut. http://www.jboss.org/

Buka zip

Seperti semua produk JBoss lainnya, Fuse juga merupakan ritsleting platform independen.

Buka zip file yang diunduh ke direktori tujuan yang Anda inginkan sebagai direktori instalasi Fuse. Pilih direktori ini dengan bijak karena ini harus tetap sama selama masa pakai instance Fuse.

Note - Meskipun Fuse membuka ritsleting dan mulai seperti produk JBoss lainnya, tidak disarankan untuk memindahkan instalasi Fuse dari satu lokasi ke lokasi lain setelah instalasi selesai.

Konfigurasi

Setelah Anda mengekstrak Fuse, Anda akan menemukan direktori berikut di dalam Direktori yang diekstrak -

  • bin
  • etc
  • deploy
  • lib
  • licenses
  • extras
  • quickstarts

Dari situ kita hanya akan menggunakan dua direktori bin & etc.

Sebenarnya setelah mengekstraksi Fuse, kita dapat memulai sekring secara langsung, tetapi ini akan memulai Fuse dengan semua konfigurasi default yang tidak disarankan untuk lingkungan produksi. Sangat disarankan untuk melakukan perubahan berikut sebelum memulai Fuse.

Tetapkan variabel Lingkungan

  • Tetapkan variabel Lingkungan berikut - JAVA_HOME

  • Variabel harus mengarah ke direktori instalasi java - M2_HOME

  • Variabel harus mengarah ke direktori instalasi Maven - PATH

  • Setel variabel jalur untuk menyertakan file executable Java & Maven.

Windows

Pada windows, pengaturan dapat dilakukan dengan mengikuti instruksi yang diberikan di bawah ini -

Mulai → Komputer Saya → Klik Kanan → Properti → Pengaturan Sistem Lanjutan → Variabel lingkungan.

UNIX & Klon

Untuk setiap pengguna, ada profil bash di *nixsistem operasi. Kita dapat menambah atau mengedit variabel sistem yang ada dengan mengubah file ini.

$ vi ~/.bash_proflle

Note- Setiap perubahan dalam file ini bersifat permanen. Sangat disarankan untuk membuat cadangan dari file yang ada sebelum mengubah aslinya.

Konfigurasi Dasar

Kita akan membahas tentang konfigurasi dasar JBoss Fuse dan untuk itu kita harus mulai dengan perintah berikut Edit $FUSE_INSTALLATION_DIR/etc/

  • Di user.properties

    • #admin=admin,admin

    • Ini perlu diubah sesuai dengan admin pertama dengan nama pengguna yang kita inginkan, admin kedua dengan kata sandi, yang ketiga mungkin tetap seperti itu karena menunjukkan peran dan jangan lupa untuk menghapus #

    • Misalnya - FuseAdmin = FusePAss, admin

    • Di System.properties

      • karafName = root

        • Ini menunjukkan nama yang ingin Anda berikan kepada Karaf instance.

        • Kita bisa menamainya apapun yang kita mau seperti Cont1.

        • Pastikan nama yang Anda berikan adalah nama yang unik dan belum digunakan oleh Fuse lainnya.

    • Di org.ops4j.pax.web.cfg

      • Org.osgi.service.http.port = 8181

      • Properti ini menunjukkan port yang akan digunakan untuk mengakses antarmuka berbasis browser HAWTIO yang disediakan oleh Fuse

      • HAWTIO adalah antarmuka browser bawaan untuk Fuse yang tersedia mulai 6.0 dan seterusnya

    • Di org.ops4j.pax.url.mvn.cfg

      • org.ops4j.pax.url.mvn.localRepository = D: / repositori

      • Properti ini menunjukkan jalur ke localRepository Maven kita dari mana Fuse akan menginstal artefaknya.

      • org.ops4j.pax.url.mvn.settings = D: /Maven/conf/settings.xml

      • Properti ini menunjukkan settings.xml yang harus digunakan Fuse untuk mendapatkan artefak dari Maven.

    Mengonfigurasi Maven

    Maven adalah prasyarat untuk memasang Fuse. Jika Anda tidak tahu apa itu maven, silakan lihathttp://www.tutorialspoint.com/maven/

    Maven adalah alat yang digunakan untuk membangun artefak Fuse. Fuse pencarian pertama di repositori lokal Maven untuk artefak ketika kita mengeluarkan perintah untuk menginstal artefak. Jadi, kita harus memberi tahu Fuse di mana Maven diinstal dan jalur repositori lokal Maven.

    Edit $ FUSE_INSTALLATION_DIR / etc /org.ops4j.paxurl.mvn.cfg

    Perbarui dua properti berikut -

    • org.ops4j.pax.url.mvn.settings = $ M2_HOME / conf /settings.xml
    • org.ops4j.pax.url.mvn.localRepository = $ local_repo

    Note - Tolong ganti $local_repo dengan jalur sebenarnya dari repositori lokal Anda yang disebutkan di Mavens settings.xml.

    Lari

    Setelah melakukan perubahan konfigurasi dasar, sekarang kita dapat memulai Fuse. Semua file biner untuk bekerja dengan Fuse berada di$FUSE_INSTALLATION_DIR.

    Ada dua cara untuk memulai Fuse -

    • Menggunakan ./fuse

      • Ini akan memungkinkan Anda untuk melihat semua kemajuan dan log di jendela yang sama tempat Anda memulai Fuse.

      • Ini akan memberi Anda konsol Karaf di terminal yang sama seperti yang ditunjukkan di bawah ini.

    Note- Ini akan memulai sekering dalam mode konsol yang berarti proses sekering juga akan dihentikan saat pengguna keluar dari sesi atau menutup Terminal yang tidak diinginkan dalam skenario produksi atau pengembangan. Skrip ini harus digunakan hanya untuk debugging Fuse.

    • Menggunakan ./start

      • Ini tidak akan menampilkan log apa pun di layar bahkan tidak kemajuannya tetapi ini akan memulai Fuse di latar belakang dan layanan Fuse tidak akan dihentikan saat pengguna keluar dari sesi atau menutup terminal.

      • Dalam Penerapan dunia nyata, jenis perilaku ini diinginkan. Sekring harus berjalan di latar belakang meskipun kita menutup terminal.

      • Jika Anda ingin menghubungkan ke Fuse yang berjalan di latar belakang, Anda dapat menggunakan client skrip yang terletak di folder yang sama.

      • Anda harus mendapatkan tampilan seperti yang ditunjukkan pada tangkapan layar berikut.

      • Keluar dari skrip klien tidak akan menghentikan layanan Fuse. Ini hanya akan menutup konsol Fuse.

    HAWTIO

    Fuse juga menyediakan akses GUI lengkap menggunakan FMC (Fuse management console). Anda dapat menemukan GUI di bawah URLhttp://localhost:8181.

    Semua yang kami lakukan dengan menjalankan perintah juga dapat dilakukan dengan mengakses GUI berbasis browser ini. Ini menjadi sangat membantu ketika kita memiliki lebih dari satu wadah dan kita menjalankannya di lingkungan Fabric.

    Pada bab ini, kita akan membahas tentang Apache Karaf dan mengapa disebut sebagai Container OSGi yang ringan beserta manfaat dan fitur penting lainnya.

    Masalah JVM

    JVM atau Mesin virtual Java tidak bertindak sebagai mesin virtual yang sebenarnya. Mesin yang memungkinkan Anda menghentikan, memulai, atau memulai ulang komponen yang berjalan di dalamnya dengan cepat. Terkadang memungkinkan penerapan panas di tingkat kelas tetapi tidak ada cara Anda dapat menerapkan atau membatalkan penerapan komponen aplikasi Anda di mesin virtual tanpa memulai ulang.

    Untuk mengatasi masalah ini dan memungkinkan modularitas dalam aplikasi Java, Fuse menggunakan runtime berbasis OSGi yang dikenal sebagai Apache Karaf.

    OSGi

    Teknologi OSGi adalah sekumpulan spesifikasi yang mendefinisikan sistem komponen dinamis untuk java. Spesifikasi ini memungkinkan model pengembangan di mana aplikasi (secara dinamis) terdiri dari banyak komponen berbeda (dapat digunakan kembali).

    Manfaat OSGi

    • Reduced Complexity - Aplikasi dibangun sebagai komponen kolaborasi yang menyembunyikan detail implementasinya satu sama lain sehingga mengurangi kompleksitas.

    • Reusability - Banyak komponen yang dapat memanfaatkan komponen yang sama yang digunakan dalam wadah.

    • Deployment - OSGi menyediakan dukungan untuk memulai, menghentikan, dan memperbarui komponen dengan cepat dengan API manajemen siklus hidupnya tanpa memulai ulang kontainer.

    Bundel Vs Fitur

    Berikut adalah perbandingan antara Bundel dan Fitur.

    bundel

    Paket setara dengan OSGi, apa toples untuk JVM. Paket adalah artefak yang dapat diterapkan dalam penampung OSGi. Bundel adalah komponen yang bekerja bersama atau sendiri-sendiri untuk membentuk suatu aplikasi.

    Paket ini dapat dipasang, dicopot, diperbarui, dimulai atau dihentikan saat runtime tanpa memulai ulang penampung.

    fitur

    Fitur adalah cara untuk menerapkan beberapa bundel bersama-sama. Terkadang lebih masuk akal untuk menerapkan bundel dalam grup. Fitur memungkinkan kami untuk menerapkan sekelompok bundel hanya dengan satu perintah.

    Mengapa Container lain?

    Apache Karaf adalah runtime berbasis OSGi, di situlah bundel Aplikasi kami berjalan. Fuse menggunakan Apache Karaf sebagai runtime-nya yang menjalankan bundel dan berkolaborasi untuk menyediakan fungsionalitas bisnis.

    Karaf dibangun di atas Felix dan equinox yang merupakan OSGi Frameworks.

    Arsitektur Karaf

    Apache Karaf menambahkan fungsi tambahan berikut ke runtime OSGi dasar.

    Penerapan Panas

    Karaf mendukung penyebaran panas. Ini berisi direktori penyebaran panas. Apa pun yang ditempatkan di direktori ini secara otomatis disebarkan dan dipasang di Karaf sebagai bundel.

    Logging

    Karaf menyediakan logging terpusat dengan menghasilkan log untuk semua bundel di $Fuse_home/data/log. Kita dapat mengedit konfigurasi logger diorg.ops4j.pax.logging.cfg di $Fuse_home/etc directory.

    Konsol Admin

    Karaf menyediakan konsol Admin yang canggih dan jelas untuk berinteraksi dengan sekering yang sedang berjalan. Ini juga menyediakan seperangkat perintah pra-instal yang dapat digunakan untuk mengelola dan memantau komponen (Bundle) saat runtime. Konsol ini dapat diperluas sehingga memungkinkan kita untuk menambahkan perintah baru ke konsol dengan menambahkan bundel baru ke konsol.

    Akses SSH

    Karaf mengizinkan akses jarak jauh ke konsol Admin ini dengan SSH. Siapapun dengan kredensial yang valid dapat terhubung ke konsol admin karaf melalui terminal SSH.

    Dalam bab ini, kita akan membahas apa itu Apache Camel dan bagaimana cara efektif merutekan data antar titik akhir, bersama dengan beberapa contoh.

    Apa Apache Camel?

    Apache Camel adalah kerangka kerja integrasi sumber terbuka yang dimulai pada awal 2007.

    Ini adalah pendekatan berbasis EIP (Enterprise Integration Pattern) yang menyediakan beberapa implementasi pola out of the box yang dapat digunakan untuk memecahkan masalah integrasi perusahaan. EIP hanyalah solusi yang terbukti untuk masalah yang terdokumentasi dengan baik dan berulang dalam integrasi perusahaan.

    Camel juga dikenal sebagai mesin perutean dan mediasi karena secara efektif merutekan data antar titik akhir, sambil mengambil beban berat seperti transformasi format data, konektivitas titik akhir, dan banyak lagi.

    Contoh Dasar

    Prasyarat untuk menggunakan Apache Camel adalah -

    • Java
    • Maven
    • Redhat JBoss Fuse 6.1-GA-379

    Buat kerangka dasar Aplikasi

    mvn:archetype generate 
    –DgroupId = com.tutorialpoint.app 
    –DartifactId = camel-first-app 
    –DarchetypeGroupId = org.apache.camel.archetypes
    –DarchetypeArtifactId = camel-archetype-spring 
    –DinteractiveMode = false -X

    Ini harus menghasilkan struktur direktori berikut.

    Ini adalah kerangka dasar dari aplikasi Unta kami yang sedang dibuat.

    Edit unta-konteks.xml

    Edit camel-first-app → src → main → resources → META-INF\spring\camel-context.xml agar cocok seperti di bawah ini

    <?xml version = "1.0" encoding = "UTF-8"?>
    <!-- Configures the Camel Context-->
    <beans xmlns = "http://www.springframework.org/schema/beans"
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation = "http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring
       http://camel.apache.org/schema/spring/camel-spring.xsd">
    
       <camelContext xmlns = "http://camel.apache.org/schema/spring">
          <!-- here is a sample which processes the input file
             (leaving them in place - see the 'noop' flag) 
             then performs content based routing on the message using XPath -->
    			
          <route>
             <from uri = "file:///d:/src/data?noop=false"/>
             <choice>
                <when>
                   <xpath>/person/city = 'London'</xpath>
                   <log message = "UK message"/>
                   <to uri = "file:///d:/target/messages/uk"/>
                </when>
    				
                <otherwise>
                   <log message = "Other message"/>
                   <to uri = "file:///d:/target/messages/others"/>
                </otherwise>
    				
             </choice>
    			
          </route>
       </camelContext>
    </beans>

    Edit pom.xml

    Tambahkan kode berikut di dalam <plugins> </plugins>

    <plugin>
       <groupId>org.apache.felix</groupId>
       <artifactId>maven-bundle-plugin</artifactId>
       <version>2.3.4</version>
       <extensions>true</extensions>
    	
       <configuration>
          <instructions>
             <Bundle-SymbolicName>
                ${project.artifactId}
             </Bundle-SymbolicName>
             <Import-Package>*</Import-Package>
          </instructions>
       </configuration>
    	
    </plugin>

    Ubah jenis kemasan dari jar → bundle.

    <packaging>bundle</packaging>

    Bangun proyek menggunakan perintah berikut -

    mvn clean install

    Pasang Proyek ke Fuse

    Mulai Fuse menggunakan Fuse.bat/start.bat. Jika Anda memulai Fuse menggunakanstart.bat, gunakan client.batuntuk terhubung 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:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT

    Uji apakah Proyek Anda sedang Berjalan

    Sekarang aplikasi Anda harus diinstal di Fuse. Salin direktori data di dalamnyacamel-first-app dan letakkan di D:/src/ dan harus menyalin pesan yang memiliki city = London D:/target/merssages/uk.

    Tempatkan file input di D:/src/data

    Input

    Message1.xml

    <?xml version = "1.0" encoding = "UTF-8"?>
    <person user = "james">
       <firstName>James</firstName>
       <lastName>Strachan</lastName>
       <city>London</city>
    </person>

    Message2.xml

    <?xml version = "1.0" encoding = "UTF-8"?>
    <person user = "hiram">
       <firstName>Hiram</firstName>
       <lastName>Chirino</lastName>
       <city>Tampa</city>
    </person>

    Output

    Di D: / target / messages / uk

    <?xml version = "1.0" encoding = "UTF-8"?>
    <person user = "james">
       <firstName>James</firstName>
       <lastName>Strachan</lastName>
       <city>London</city>
    </person>

    Di D: / target / messages / others

    <?xml version = "1.0" encoding = "UTF-8"?>
    <person user = "hiram">
       <firstName>Hiram</firstName>
       <lastName>Chirino</lastName>
       <city>Tampa</city>
    </person>

    Dalam bab ini, kita akan memahami berbagai Konsep Unta. Mari kita mulai dengan mengambil contoh dasar untuk memahami konsep inti sebagai permulaan.

    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

    Dalam bab ini, mari kita bahas tentang apa itu Apache CXF dan bagaimana hal itu dapat membantu dalam mengembangkan SOAP dan Layanan Web Lainnya.

    Apa itu Apache CXF?

    Apache CXF adalah kerangka pengembangan layanan web yang dapat digunakan untuk mengembangkan layanan web SOAP dan Rest. CXF sepenuhnya sesuai denganJAX-RS and JAX-Ws standar.

    Ini adalah kerangka pengembangan layanan web yang paling banyak digunakan sekarang. CXF telah belajar dan meningkatkan Axis2 yang sekarang secara bertahap digantikan oleh CXF.

    CXF vs Sumbu2

    CXF Sumbu2
    Perbaikan

    CXF adalah kerangka kerja yang paling banyak digunakan sampai sekarang.

    Ini memiliki banyak peningkatan dibandingkan Axis2

    Axis2 secara bertahap digantikan oleh CXf.

    Ini membutuhkan lebih banyak kode dibandingkan dengan CXF

    Kode diperlukan

    CXF membutuhkan lebih sedikit kode dibandingkan dengan Axis2

    Axis2 membutuhkan lebih banyak kode secara komparatif

    Kepatuhan Standar

    CSF sepenuhnya sesuai dengan JAX-RS dan JAX-WS

    Axis2 tidak sepenuhnya sesuai dengan JAX-RS dan JAX-WS

    Kompatibel dengan Spring

    Iya

    Tidak

    Pemisahan ujung depan

    Pemisahan bersih front-end dari kode JAX-WS

    Tidak ada pemisahan yang bersih

    SABUN MANDI

    SOAP adalah singkatan dari Simple Object Access Protocol. Ini adalah protokol untuk bertukar informasi terstruktur melalui layanan web antara dua sistem. Ini sebagian besar bergantung pada XML untuk menyusun data dan menggunakan HTTP atau SMTP untuk negosiasi dan transmisi pesan.

    Ada dua pendekatan untuk mengembangkan layanan web SOAP -

    • Code first - Dalam pendekatan ini, WSDL dihasilkan dari kode.

    • Contract first - Dalam kontrak pertama, kode dihasilkan dari WSDL.

    Pengembangan SOAP Menggunakan CXF

    Konfigurasi Maven

    Tambahkan profil berikut ke settings.xml Anda di Maven.

    <profiles>
       <profile>
          <id>Jboss-Fuse</id>
    		
          <activation>
             <activeByDefault>true</activeByDefault>
          </activation>
    		
          <repositories>
             <repository>
                <id>fusesource</id>
                <url>http://repo.fusesource.com/nexus/content/groups/public/</url>
                <snapshots>
                   <enabled>false</enabled>
                </snapshots>
                <releases>
                   <enabled>true</enabled>
                </releases>
             </repository>
          </repositories>
    		
       </profile>
    </profiles>

    Buat Kerangka

    mvn archetype:generate
    -DarchetypeGroupId = org.apache.servicemix.tooling 
    -DarchetypeArtifactId = servicemix-cxf-code-first-osgi-bundle 
    -DarchetypeVersion=2012.01.0.redhat-60024 
    -DgroupId = org.fusesource.example 
    -DartifactId = cxf-basic 
    -Dversion = 1.0-SNAPSHOT

    Build Web Service Project.

    mvn clean install

    Install web-service into Fuse using the following command.

    JBossFuse:karaf@root>install -s mvn:org.fusesource.example/cxf-basic/1.0-SNAPSH

    Check if bundle has registered SOQP web-service

    Buka URL http://localhost:8181/cxf

    Layanan web harus terdaftar sebagai berikut.

    Testing Web-Service

    mvn -Pclient

    INFO - Membuat Layanan {http://ws.totorials.com/} PersonService dari kelas com.to

    torials.ws.Person
    Invoking getPerson...
    getPerson._getPerson_personId = Guillaume
    getPerson._getPerson_ssn = 000-000-0000
    getPerson._getPerson_name = Guillaume
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 30.668 s
    [INFO] Finished at: 2016-02-15T21:01:20+05:30
    [INFO] Final Memory: 10M/37M
    [INFO] ------------------------------------------------------------------------

    Pertama-tama, REST adalah singkatan dari Representational State Transfer. Ini adalah cara mengembangkan layanan web berdasarkan protokol server-klien tanpa status, dapat disimpan dalam cache, yang dalam banyak kasus merupakan HTTP.

    Layanan web REST menggunakan permintaan HTTP untuk memposting, mendapatkan, menghapus data dari jaringan.

    Pengembangan REST menggunakan CXF

    Buat proyek mulai cepat Maven sederhana

    mvn archetype:generate 
    -DgroupId = com.tuts.abhinav 
    -DartifactId = rest-service
    -DarchetypeArtifactId = maven-archetype-quickstart 
    -DinteractiveMode = false

    Tambahkan dependensi

    <dependency>
       <groupId>org.apache.servicemix.specs</groupId>
       <artifactId>org.apache.servicemix.specs.jsr311-api-1.1.1</artifactId>
       <version>1.9.0</version>
       <scope>provided</scope>
    </dependency>
    
    <dependency>
       <groupId>org.apache.servicemix</groupId>
       <artifactId>servicemix-http</artifactId>
       <version>2013.01</version>
    </dependency>
    
    <dependency>
       <groupId>log4j</groupId>
       <artifactId>log4j</artifactId>
       <version>1.2.16</version>
    </dependency>

    Tambahkan Instruksi Bangun

    <build>
       <defaultGoal>install</defaultGoal>
       <plugins>
          <plugin>
             <groupId>org.apache.felix</groupId>
             <artifalctId>maven-bundle-plugin</artifactId>
             <version>2.3.4</version>
             <extensions>true</extensions>
    			
             <configuration>
                <instructions>
                   <Bundle-SymbolicName>rest-example-database-post-method
                      </Bundle-SymbolicName>
                   <Import-Package>* </Import-Package>
                </instructions>
             </configuration>
    			
          </plugin>
       </plugins>
    </build>

    Tambahkan Repositori Plugin Fuse

    <pluginRepositories>
       <pluginRepository>
          <id>fusesource.m2</id>
          <name>FuseSource Community Release Repository</name>
          <url>http://repo.fusesource.com/nexus/content/repositories/releases</url>
          <snapshots>
             <enabled>false</enabled>
          </snapshots>
    		
          <releases>
             <enabled>true</enabled>
          </releases>
       </pluginRepository>
    <pluginRepositories>

    Tambahkan Repositori

    <repositories>
       <repository>
          <id>fusesource.m2</id>
          <name>FuseSource Community Release Repository</name>
          <url>http://repo.fusesource.com/nexus/content/repositories/releases</url>
          <snapshots>
             <enabled>false</enabled>
          </snapshots>
    		
          <releases>
             <enabled>true</enabled>
          </releases>
    		
       </repository>
    	
       <repository>
          <id>fusesource.ea</id>
          <name>FuseSource Community Early Access Release Repository</name>
          <url>http://repo.fusesource.com/nexus/content/groups/ea</url>
          <snapshots>
             <enabled>false</enabled>
          </snapshots>
          <releases>
             <enabled>true</enabled>
          </releases>
       </repository>
    	
    </repositories>

    Buat Kelas Layanan

    Buat kelas UserService.java di bawah com / tuts /

    package com.tuts;
    
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    
    @Path("/UserService_1")
    public class UserService {
       @GET
       @Path("/get_data")
       @Produces(MediaType.APPLICATION_JSON)
    	
       public String getUser() {
          String reponse = "This is standard response from REST";
          return reponse;
       }
    }

    Buat Blueprint.xml

    Buat cetak biru.xml di bawah / src / main / resources / OSGI-INF / blueprint blueprint.xml

    <?xml version = "1.0" encoding = "UTF-8"?>
    <blueprint xmlns = "http://www.osgi.org/xmlns/blueprint/v1.0.0"
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:jaxrs = "http://cxf.apache.org/blueprint/jaxrs"
       xsi:schemaLocation = "http://www.osgi.org/xmlns/blueprint/v1.0.0 
       http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
       http://cxf.apache.org/blueprint/jaxrs 
       http://cxf.apache.org/schemas/blueprint/jaxrs.xsd">
    	
       <jaxrs:server id = "service" address = "/users">
          <jaxrs:serviceBeans>
             <ref component-id = "userService" />
          </jaxrs:serviceBeans>
       </jaxrs:server>
    	
       <bean id = "userService" class = "com.tuts.UserService" />
    </blueprint>

    Instal layanan Istirahat di Fuse

    install -s mvn:com.tuts.abhinav/rest-service/1.0-SNAPSHOT

    Periksa apakah Bundle memiliki Layanan Web Terdaftar

    Buka URL http://localhost:8181/cxf

    Uji Layanan Web

    Buka URL http://localhost:8181/cxf/users12/UserService_1/get_data

    Dalam bab ini, kita akan mengetahui tentang ActiveMQ dan bagaimana ia bertindak sebagai perantara pesan untuk memungkinkan aplikasi berkomunikasi satu sama lain.

    Apakah AMQ itu?

    ActiveMQ adalah broker pesan open source yang ditulis di Java. Ini sepenuhnya sesuai dengan standar JMS 1.1.

    JMS adalah spesifikasi yang memungkinkan pengembangan sistem berbasis pesan. ActiveMQ bertindak sebagai perantara pesan yang berada di antara aplikasi dan memungkinkan mereka untuk berkomunikasi secara asynchronous dan dapat diandalkan.

    Jenis Pesan

    Ada dua jenis opsi perpesanan yang dijelaskan di bawah untuk pemahaman yang lebih baik.

    Poin ke poin

    Dalam jenis komunikasi ini, broker mengirimkan pesan hanya ke satu konsumen, sedangkan konsumen lain akan menunggu sampai mereka mendapatkan pesan dari broker. Tidak ada konsumen yang akan mendapatkan pesan yang sama.

    Jika tidak ada konsumen, Broker akan menyimpan pesan-pesan tersebut sampai mendapatkan konsumen. Jenis komunikasi ini juga disebut sebagaiQueue based communicationdi mana Produser mengirim pesan ke antrian dan hanya satu konsumen yang mendapat satu pesan dari antrian. Jika ada lebih dari satu konsumen, mereka mungkin mendapatkan pesan berikutnya tetapi mereka tidak akan mendapatkan pesan yang sama dengan konsumen lainnya.

    Publikasikan / Berlangganan

    Dalam jenis komunikasi ini, Pialang mengirimkan salinan pesan yang sama ke semua konsumen aktif. Jenis komunikasi ini juga dikenal sebagaiTopic based communicationdimana broker mengirimkan pesan yang sama kepada semua konsumen aktif yang telah berlangganan Topik tertentu. Model ini mendukung komunikasi satu arah di mana tidak ada verifikasi pesan yang ditransmisikan.

    Membuat Antrian dan Topik

    Fuse dibundel dengan ActiveMQ. Kita dapat mengakses ActiveMQ menggunakan konsol FMC (antarmuka berbasis browser untuk bekerja dengan AMQ).

    Masuk ke FMC menggunakan localhost:8181 dan pilih ActiveMQ tab.

    • Klik + Buat
    • Masukkan Nama Antrian / Topik
    • Pilih Queue / Topic dari radio button
    • Klik Buat Antrian / Buat topik

    Sekarang Anda dapat melihat file TestQ dibuat di bawah root → Queue →

    Untuk memeriksa topik yang dibuat ikuti root → Topik.

    Menjelajah / Menghapus Isi Antrian

    • Masuk ke FMC menggunakan localhost:8181

    • Pilih tab ActiveMQ

    • Root → Queue → TestQ <pilih antrian yang ingin Anda telusuri> → Browse

    • Untuk memeriksa isi pesan ini, klik pada pesan itu.
    • Anda dapat menghapus pesan tertentu dengan mengklik tombol Hapus yang ditampilkan di sudut kanan atas

    Dalam bab ini, kita akan mempelajari dasar-dasar bagaimana ActiveMQ bekerja dengan Camel.

    Konfigurasi ke Komponen ActiveMQ

    Sebelum kita dapat menggunakan antrian atau topik ActiveMQ dalam kode kita, kita harus mengkonfigurasi ActiveMQComponent. Konfigurasi minimal ActiveMQComponent dapat dilakukan seperti yang ditunjukkan pada program berikut -

    <bean id = "activemq" class = "org.apache.activemq.camel.component.ActiveMQComponent">
       <property name = "brokerURL" value = "tcp://localhost:61616"/>
       <property name = "userName" value = "admin"/>
       <property name = "password" value = "admin"/>
    </bean>
    • brokerURL - Menentukan host dan port untuk AMQ Broker.

    • username - Menentukan nama pengguna yang akan digunakan untuk menghubungkan ke AMQ Broker.

    • password - menentukan kata sandi untuk menghubungkan ke AMQ Broker.

    Menghubungkan ke Antrian

    Sekarang kita telah mengkonfigurasi ActiveMQComponent, kita dapat menggunakannya di CamelContext sebagai titik akhir.

    Kami akan menggunakan titik akhir AMQ dalam format berikut -

    Activemq:[queue|topic]:[queueName|topicName]

    Menulis Pesan ke AMQ

    <?xml version = "1.0" encoding="UTF-8"?>
    <!-- Configures the Camel Context-->
    <beans xmlns = "http://www.springframework.org/schema/beans"
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation = "http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring
       http://camel.apache.org/schema/spring/camel-spring.xsd">

    Setelah menerapkan bundel ini dalam wadah Fuse, Anda seharusnya dapat melihat pesan yang diposting ke AMQ yang ditempatkan sebagai file di D:/src/data.

    Input

    D: /src/data/input.txt

    Test me

    Output

    Membaca dari AMQ

    <?xml version = "1.0" encoding = "UTF-8"?>
    <!-- Configures the Camel Context-->
    
    <beans xmlns = "http://www.springframework.org/schema/beans"
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation = "
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring
       http://camel.apache.org/schema/spring/camel-spring.xsd">
    	
       <camelContext xmlns = "http://camel.apache.org/schema/spring">
          <!-- here is a sample which processes the input files
             (leaving them in place - see the 'noop' flag)
              then performs content based routing on the message using XPath -->
    			 
          <route>
             <from uri = "activemq:queue:TestQ"/>
             <to uri = "file:///d:/src"/>
          </route>
       </camelContext>
    	
       <bean id = "activemq" class = "org.apache.activemq.camel.component.ActiveMQComponent">
          <property name = "brokerURL" value = "tcp://localhost:61616"/>
          <property name = "userName" value = "admin"/>
          <property name = "password" value = "admin"/>
       </bean>
    	
    </beans>

    Input

    Setelah menerapkan bundel ini, Anda akan melihat file sedang dibuat di D: / src dan pesan dikonsumsi. Juga Konsumen harus ditunjukkan untuk Antrian itu.

    Output

    D: / src

    Test me

    Menulis ke Topik

    <?xml version = "1.0" encoding = "UTF-8"?>
    <!-- Configures the Camel Context-->
    <beans xmlns = "http://www.springframework.org/schema/beans"
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation = "http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring 
       http://camel.apache.org/schema/spring/camel-spring.xsd">
    	
       <camelContext xmlns = "http://camel.apache.org/schema/spring">
          <!-- here is a sample which processes the input files
             (leaving them in place - see the 'noop' flag)
              then performs content based routing on the message using XPath -->
    			 
          <route>
             <from uri = "file:///d:/src"/>
             <to uri = "activemq:topic:TestTopic” />
          </route>
       </camelContext>
    	
       <bean id = "activemq" class = "org.apache.activemq.camel.component.ActiveMQComponent">
          <property name = "brokerURL" value = "tcp://localhost:61616"/>
          <property name = "userName" value = "admin"/>
          <property name = "password" value = "admin"/>
       </bean>
    	
    </beans>

Membaca dari Topik

<?xml version = "1.0" encoding = "UTF-8"?>
<!-- Configures the Camel Context-->
<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "
   http://www.springframework.org/schema/beans 
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://camel.apache.org/schema/spring 
   http://camel.apache.org/schema/spring/camel-spring.xsd">
	
   <camelContext xmlns = "http://camel.apache.org/schema/spring">
      <!-- here is a sample which processes the input files
         (leaving them in place - see the 'noop' flag)
         then performs content based routing on the message using XPath -->
			
      <route>
         <from uri = "activemq:topic:TestTopic"/>
         <to uri = "file:///d:/src2"/>
      </route>
   </camelContext>
	
   <bean id = "activemq" class = "org.apache.activemq.camel.component.ActiveMQComponent">
      <property name = "brokerURL" value="tcp://localhost:61616"/>
      <property name = "userName" value = "admin"/>
      <property name = "password" value = "admin"/>
   </bean>
	
</beans>

Input

D: /src/file1.xml

<order>
   <data>
      <value>value1</value>
   </data>
</order>

<order>
   <data>
      <value>value2</value>
   </data>
</order>

<order>
   <data>
      <value>value3</value>
   </data>
</order>

Output

D: / src /

<order>
   <data>
      <value>value1</value>
   </data>
</order>

<order>
   <data>
      <value>value2</value>
   </data>
</order>

<order>
   <data>
      <value>value3</value>
   </data>
</order>

Apa itu Fabric?

Fabric menyediakan kemampuan manajemen dan orkestrasi untuk beberapa instans Fuse. Fabric memungkinkan kita untuk mengontrol semua instance Fuse yang terhubung dengannya dari satu titik. Wadah Fuse normal dapat diubah menjadi Fabric. Fabric memiliki registry fabric di dalamnya yang berfungsi sebagai penyimpanan data yang berisi semua informasi tentang container, yang dikelolanya.

Mengapa Fabric?

Kain memiliki kemampuan khusus berikut yang menjadikannya kandidat ideal untuk digunakan di lingkungan terdistribusi.

  • Memantau status semua wadah di kain.
  • Memulai dan menghentikan kontainer jarak jauh.
  • Penyediaan remote container untuk menjalankan aplikasi tertentu.
  • Mengupgrade aplikasi dan meluncurkan tambalan di sistem langsung.
  • Memulai dan menyediakan kontainer baru dengan cepat misalnya untuk mengatasi beban yang meningkat pada sistem.

Penyiapan Kain

Membuat Kain

Wadah Sekring Normal dapat diubah menjadi Fabric dengan menggunakan perintah berikut

fabric: create --clean --zookeeper-password myZooPass

Menghubungkan wadah lain ke Fabric -

fabric:join --zookeeper-password myZooPass <fabric_host>:2181 Cont1

Note - Harap ganti <fabric_host> dengan nama host sebenarnya tempat fabric berjalan.

Saat Anda login ke Fuse Management Console dari browser Anda menggunakan localhost:8181, Anda seharusnya dapat melihat dua wadah seperti yang ditunjukkan pada gambar layar berikut. Wadah Fabric ditandai dengan simbol awan kecil di depannya.

Profil

Profil berisi informasi berikut -

  • Bundel untuk dipasang
  • Fitur yang akan diinstal
  • Konfigurasi yang akan diterapkan

Profil menyediakan cara di lingkungan fabric untuk menginstal kumpulan bundel, fitur, dan konfigurasi yang sama di beberapa server.

Jika profil yang sama diterapkan ke beberapa penampung dan kami melakukan perubahan pada profil itu dari penampung apa pun, perubahan serupa akan diterapkan secara otomatis ke penampung yang tersisa tempat ia diterapkan.

Membuat Profil

  • Masuk ke FMC localhost:8181

  • Runtime → Kelola

  • Di sisi kiri di bawah menu Profil klik +

Masukkan nama yang ingin Anda berikan ke profil dan klik buat.

Setelah ini, profil harus dibuat.

Menerapkan Profil ke Penampung

Runtime → Containers → root (pilih container yang Anda inginkan)

Klik Addyang akan mengarah ke kotak pop-up. Cari profil yang Anda inginkan dan kemudian klik lagiAdd.

Profil harus ditampilkan dalam daftar seperti yang ditunjukkan pada gambar layar berikut.

Menerapkan Bundel

Untuk menerapkan bundel, gunakan jalur berikut -

Runtime → Containers → root (pilih container yang Anda inginkan) → First_profile (pilih profil)

Klik tab Bundel. Atur jalur bundel dalam format berikut dan kemudian klik+.

mvn:group.id/artifact.id/version

Sebagai contoh: mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT

Sebuah bundel akan ditambahkan ke profil dan akan diterapkan pada semua penampung tempat profil ditetapkan.

Membatalkan penerapan Bundle

Untuk membatalkan penerapan bundel, gunakan jalur berikut -

Runtime → Containers → root (pilih container yang Anda inginkan) → First_profile (pilih profil)

Klik tab Bundel dan cari bundel yang ingin Anda hapus lalu klik X. Bundel akan dihapus dari semua penampung tempat profil diterapkan.

Sebuah Kontainer Anak menyediakan cara termudah untuk mengelola beban yang meningkat. Ketika sistem mengalami beban mendadak dalam lalu lintas dan satu kontainer tidak dapat mengatasi beban tersebut, kita dapat dengan mudah membuat satu set kontainer anak dan mendistribusikan beban di antara mereka, daripada membuat kontainer baru yang lengkap.

Membuat Penampung Anak

Masuk ke FMC menggunakan localhost:8181

Sekarang, ikuti jalur: Runtime → container → + Create (tombol di sisi kanan)

Masukkan detail seperti nama anak, penampung induk, Jumlah instance, dll.

Klik Create And Start Container

Mengelola Penampung Anak

Wadah Anak hanya berfungsi sebagai wadah normal.

Menghentikan Kontainer Anak

Untuk menghentikan container turunan, ikuti jalur: Runtime → Container → Child1

Klik Berhenti untuk menghentikan Penampung Anak.

Memulai Penampung Anak

Untuk memulai container anak, ikuti jalur: Runtime → Container → Child1

Klik Mulai untuk memulai penampung anak.

Dalam bab ini, kita akan membahas beberapa masalah umum yang mungkin Anda temui saat bekerja dengan Fuse. Kami juga akan membahas bagaimana Anda bisa mengatasi masalah ini.

Perubahan Kode tidak Tercermin

Hubungkan ke instance Fuse menggunakan skrip klien. Cari bundel yang Anda hadapi masalah, menggunakan perintah berikut.

JBossFuse:karaf@root > list|grep <Bundle Description>
For Example:
JBossFuse:karaf@root > list|grep Camel
[ 255] [Active ] [ ] [ ] [ 60] Fabric8 :: Camel Component (1.0.0.redhat-379)
[ 266] [Active ] [ ] [Started] [ 60] A Camel Spring Route (1.0.0.SNAPSHOT)

Note - Bundel ID untuk bundel dari keluaran perintah di atas dan gunakan perintah di bawah ini.

JBossFuse:karaf@root > update <bundle id>
JBossFuse:karaf@root > update 266

Bundel tidak Sedang Diunduh

Itu mungkin terjadi karena dua alasan berikut -

  • Repositori Maven tidak ditentukan
  • Paket tidak ada dalam repositori

Repositori Maven tidak Ditentukan

Maven adalah alat yang digunakan untuk membangun artefak Fuse. Fuse pencarian pertama di repositori lokal Maven untuk artefak, ketika kita mengeluarkan perintah untuk menginstal artefak. Jadi kita harus memberi tahu Fuse di mana Maven diinstal dan jalur repositori lokal Mavens.

Edit $ FUSE_INSTALLATION_DIR / etc /org.ops4j.paxurl.mvn.cfg

Perbarui dua properti berikut -

  • org.ops4j.pax.url.mvn.settings = $ M2_HOME / conf /settings.xml
  • org.ops4j.pax.url.mvn.localRepository = $ local_repo

Note - Silakan ubah $ local_repo dengan path sebenarnya dari repositori lokal Anda yang disebutkan di Mavens settings.xml

Bundel tidak Ada di Repositori

Jika pengaturan Maven ada tetapi masih jika Anda menghadapi masalah saat mengunduh bundel, pastikan bundelnya JAR ada di lokasi yang benar di Maven Repository.

Misalnya, jika bundel berikut menampilkan kesalahan saat mengunduh -

mvn:com.tutorialpoint.app/camel-first-app/1.0-SNAPSHOT

Kita harus memeriksa $ M2_REPO / com / tutorialpoint / app / camel-first-app / 1.0-SNAPSHOT jika JAR sebenarnya ada.

Note - $ M2_REPO perlu diganti dengan path sebenarnya dari repositori Maven yang telah dikonfigurasi Fuse untuk digunakan.

Tidak Mampu Masuk ke FMC (GUI berbasis browser)

Users not Created - Jika Anda mendapatkan UI berikut tetapi tidak dapat masuk dengan pesan yang mengatakan "Gagal masuk, Terlarang".

Periksa apakah Anda telah menambahkan pengguna di $FUSE_INSTALLATION_HOME/etc/users.properties

Format yang benar untuk menambahkan pengguna adalah -

Username = Password,Role

Port HAWTIO berbeda

Jika Anda bahkan tidak bisa mendapatkan UI di localhost: 8181 di browser, periksa apakah Anda telah menyebutkan porta yang benar di URL.

$FUSE_INSTALLATION_HOME/etc/org.ops4j.pax.web.cfg

Edit properti berikut di file untuk menggunakan port yang ingin Anda akses.

org.osgi.service.http.port=8181

AMQ Broker tidak bekerja

Pastikan port 61616 terbuka dan saat ini tidak digunakan oleh port lain. Jika Anda ingin mengubah port 61616 default untuk hal yang sama, Anda dapat mengeditnya di$FUSE_INSTALLATION_HOME/etc/System.properties

activemq.port = 61616