JBoss Fuse - Hızlı Kılavuz

Bu bölümde, Enterprise Service Bus'un temelleriyle başlayacağız. Aşağıda, ESB hakkında avantajları, dezavantajları ve daha kolay anlaşılması için birkaç diyagram ile ilgili ayrıntılı bir açıklama verilmiştir.

ESB nedir?

ESB, Enterprise Service Bus anlamına gelir. En basit haliyle ESB, birden fazla uygulamanın iletişim kurmasına yardımcı olan bir bilgi yolu görevi gören bir ara yazılımdır.

Kurumsal dünyada birçok şeye çözüm geliştiriyoruz. Bu çözümler, farklı teknolojileri ve farklı veri formatlarını kullanabilir. Bu teknolojilerdeki iletişim veya veri formatının uyumluluk farklılıkları nedeniyle bu çözümleri birlikte kullanmak zahmetli hale geliyor. Bu nedenle izin verecek bir teknolojiye ihtiyacımız varloosely coupled integration bu farklı çözümler arasında.

ESB, tüm uygulamalarınızın ortasında yer alan ve aralarında mesaj yönlendirmeyi kolaylaştıran bir 'HUB' haline gelerek bu entegrasyon sorununu basitleştirmeyi amaçlamaktadır. ESB, bilgi yolu görevi gören, veri dönüştürme yönlendirmesiyle ilgilenen, Kodlayıcı veya Geliştiriciyi kendi uygulama mantığına odaklanmaya bırakan bir arabulucu görevi görür.

ESB'yi anlamak, özellikle tasarlandığı sorunu anladığımızda çok basitleşir ve çözüm kolaylaşır. Bilgi paylaşmak ve entegre bir iş platformu oluşturmak için farklı dillerde yazılmış ve farklı veri formatlarını kullanarak farklı makinelerde çalışan birçok farklı sistemin nasıl etkinleştirileceği konusunda net bir anlayışa sahip olunmalıdır.

Entegrasyon Sorunu

Kurumsal platformda, birden çok uygulamanın işbirliği yapması ve bir bütün olarak iş işlevselliği sağlaması yaygındır, ancak bu uygulamaların entegrasyonu en sık tekrarlanan sorundur. Uygulamalar büyüdükçe zamanla daha da zorlaşır.

Her uygulama, verileri kendi formatında girebilir ve çıkarabilir. Bu yaklaşım, uygulama sayısı azsa iyi çalışır, ancak uygulama sayısı arttıkça, entegrasyon çarklarının daha iyi bir yaklaşımla karıştırılması gerekir. Örneğin, bir iş için belirli bir uygulamanın değiştirilmesi gerekiyorsa, o Ana uygulamaya bağımlı olan tüm uygulamalar için çıktı veya girdi veri formatı etkilenir.

Böyle bir yaklaşım, sıkı sıkıya bağlı bir mimari bekleyen Entegrasyon için en büyük engel olarak hizmet etmektedir. Burası ESB'nin devreye girdiği yerdir. Her uygulamanın diğer uygulama ile doğrudan iletişim kurmasına gerek yoktur; bunun yerine, tüm uygulamalar ESB ile iletişim kurar ve ESB, bilgilerin yönlendirilmesini ve dahili veri formatı dönüşümünü gerçekleştirir.

Neden ESB?

Aşağıda, Enterprise Service Bus'un neden gerekli olduğunu açıklayan birkaç nokta verilmiştir.

  • ESB, varyant uyumlu uygulamalarla entegrasyon sorununu basitleştirmeyi amaçlamaktadır.

  • Tüm uygulamalarınız için bir arabulucu görevi gören ve aralarında mesaj yönlendirmeyi kolaylaştıran bir Middleware görevi görür.

  • Her uygulamanın diğer uygulamalarla doğrudan bağlantı kurması yerine, artık her uygulamanın ESB'ye yalnızca bir arabirimi vardır.

  • ESB, mesajları ortak bir formata / formattan çevirmekten ve hedeflerine yönlendirmekten sorumludur.

  • Mevcut uygulamalarınızdan herhangi birini değiştirmeniz gerekirse, bu yaklaşımdaki en büyük tasarruf bir nimet olarak gelir. Bir sürü yeni arabirim yazmak yerine, artık endişelenmeniz gereken tek bir arabiriminiz var (uygulamanız ve ESB arasında).

SOA ve ESB?

SOA ve ESB genellikle birbirinin yerine kullanılır, ancak tamamen farklıdırlar.

SOA, uygulamanın işlevselliklerini iletişim protokolleri aracılığıyla ağ üzerinden bir hizmet olarak ortaya çıkarmasına izin veren bir tasarım modelidir, oysa ESB, farklı sistemler arasındaki iletişimi kolaylaştıran bir modeldir, ancak ESB, SOA uygularken bir omurga olarak kullanılabilir.

JBoss Fuse, Redhat'in açık kaynaklı bir ESB çözümüdür. Topluluk projesi olan Apache Servicemix'e dayalı kurumsal bir çözümdür.

Sigortaya Entegrasyon

JBoss Fuse, kurumsal uygulamaların hızlı entegrasyonuna izin veren hafif ve esnek bir entegrasyon platformudur.

Fuse, ilk olarak 2012 yılında Redhat tarafından satın alınan Progressive software Inc. tarafından geliştirilmiştir. JBoss Fuse 6.1.0.redhat-379 GA, resmi web sitelerinden indirilebilen sabit bir Fuse sürümüdür.

Mimari

Fuse, çeşitli teknolojileri tek bir ürün olarak bir araya getirir.

Bileşenler

Apache CXF

Apache CXF, SOAP & Rest web hizmetlerinin geliştirilmesini de destekleyen açık kaynaklı bir web hizmetleri geliştirme çerçevesidir.

Apaçi Devesi

Apache Camel, EIP tabanlı bir entegrasyon çerçevesidir. EIP veya Kurumsal Entegrasyon kalıpları, Kurumsal Entegrasyonda tekrar eden sorunlara yönelik çözümlerdir. Komple entegrasyon çözümü, önceden tanımlanmış bu kutu modellerinin kombinasyonları ile meteorik olarak elde edilebilir.

Java, Spring DSL ve Scala gibi birkaç Etki Alanına Özel Dilde yönlendirme mantığı yazılmasına izin verir.

Apache AMQ

Apache AMQ, JMS standartlarına göre güvenilir mesajlaşma sistemi sağlayan bir JMS'dir. Yalnızca JMS spesifikasyonunu desteklemekle kalmaz, aynı zamanda JMS spesifikasyonlarına dahil olmayan bazı heyecan verici ve kullanışlı özellikler sunar.

Apache Karaf

Apache Karaf, eserler için çalışma zamanı görevi gören hafif OSGi kapsayıcısıdır. Apache Karaf, doğası gereği JVM'ye kıyasla daha dinamiktir. Çalışma zamanında modülleri yüklemeye veya kaldırmaya izin verir. Fuse'daki tüm eserler Karaf'ta konuşlandırıldı.

Kumaş

Yapı, geniş ve dağıtılmış bir ortamda yapıların dağıtımını yönetmenin kolay bir yolunu sağlar. Tüm çoklu sigorta örnekleri için merkezi yönetim sağlar.

Sigorta Takma

Fuse'u kurmak oldukça basittir. Diğer JBoss ürünleri gibi, Fuse de çıkarılabilen bir zip dosyası olarak gelir ve bazı küçük yapılandırma değişikliklerinden sonra doğrudan başlatılabilir.

Fuse'u kurmak dört adımlı bir işlemdir -

İndir

Fuse 6.1.0 GA'yı aşağıdaki bağlantıdan indirin. http://www.jboss.org/

Fermuarı aç

Diğer tüm JBoss ürünleri gibi, Fuse de platformdan bağımsız bir ziptir.

İndirilen dosyayı Fuse kurulum dizini olmasını istediğiniz hedef dizine çıkartın. Fuse örneğinin ömrü boyunca aynı kalması gerektiğinden, bu dizini akıllıca seçin.

Note - Fuse'un fermuarlarını açıp diğer JBoss ürünleri gibi başlamasına rağmen, kurulum tamamlandıktan sonra Fuse kurulumunu bir yerden başka bir yere taşımanız önerilmez.

Yapılandır

Fuse'u açtıktan sonra, çıkarılan Dizin içinde aşağıdaki dizinleri bulacaksınız -

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

Bunun dışında sadece iki dizin kullanacağız bin & etc.

Fuse'u çıkardıktan hemen sonra, doğrudan sigortayı başlatabilmeliyiz, ancak bu, üretim ortamı için tavsiye edilmeyen tüm varsayılan yapılandırmalarla Fuse'u başlatacaktır. Sigortayı başlatmadan önce aşağıdaki değişikliklerin yapılması şiddetle tavsiye edilir.

Ortam değişkenlerini ayarlayın

  • Aşağıdaki Ortam değişkenlerini ayarlayın - JAVA_HOME

  • Değişken java kurulum dizinine işaret etmelidir - M2_HOME

  • Değişken Maven kurulum dizinini göstermelidir - PATH

  • Yol değişkenini Java ve Maven yürütülebilir dosyalarını içerecek şekilde ayarlayın.

pencereler

Windows'ta ayarlar, aşağıda verilen talimatlar izlenerek yapılabilir -

Başlat → Bilgisayarım → Sağ Tık → Özellikler → Gelişmiş Sistem ayarları → Ortam değişkenleri.

UNIX ve Klonlar

Her kullanıcı için bir bash profili vardır. *nixişletim sistemleri. Bu dosyayı değiştirerek mevcut sistem değişkenini ekleyebilir veya düzenleyebiliriz.

$ vi ~/.bash_proflle

Note- Bu dosyadaki herhangi bir değişiklik kalıcıdır. Orijinali değiştirmeden önce mevcut dosyanın yedeğini almanız önemle tavsiye edilir.

Temel yapılandırma

JBoss Fuse'un temel yapılandırması hakkında tartışacağız ve bunun için aşağıdaki komutla başlamamız gerekiyor Edit $FUSE_INSTALLATION_DIR/etc/

  • İçinde user.properties

    • #admin=admin,admin

    • Bu, istediğimiz kullanıcı adı olan ilk admin'e göre değiştirilmeli, şifreli ikinci admin, üçüncüsü olduğu gibi tutulabilir çünkü bir rolü gösterir ve kaldırmayı unutmayın #

    • Örneğin - FuseAdmin = FusePAss, admin

    • İçinde System.properties

      • karafName = kök

        • Bu, Karaf örneğine vermek istediğiniz adı gösterir.

        • Cont1 gibi istediğimiz her şeyi adlandırabiliriz.

        • Verdiğiniz bu adın benzersiz bir ad olduğundan ve başka bir Fuse örneği tarafından kullanılmadığından emin olun.

    • İçinde org.ops4j.pax.web.cfg

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

      • Bu özellik, Fuse tarafından sağlanan tarayıcı tabanlı arayüz HAWTIO'ya erişmek için kullanılacak bağlantı noktasını belirtir.

      • HAWTIO, 6.0'dan itibaren kullanılabilen Fuse'a yerleşik bir tarayıcı arayüzüdür

    • İçinde org.ops4j.pax.url.mvn.cfg

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

      • Bu özellik, Maven'ımızın localRepository'sinin Fuse'un yapıtlarını yükleyeceği yolu gösterir.

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

      • Bu özellik, Maven'den yapay nesneler almak için hangi Fuse'un kullanması gerektiğini settings.xml'yi belirtir.

    Maven'i Yapılandırma

    Maven, Fuse'u kurmak için bir ön koşuldur. Maven'ın ne olduğunu bilmiyorsanız lütfen bakınhttp://www.tutorialspoint.com/maven/

    Maven, Fuse yapıları oluşturmak için kullanılan yerleşik bir araçtır. Fuse, yapıyı yüklemek için komut verdiğimizde ilk olarak yapay nesneler için Maven yerel deposunda arama yapar. Bu yüzden Fuse'a Maven'in nerede kurulu olduğunu ve Maven'in yerel deposunun yolunu bilmesini sağlamalıyız.

    $ FUSE_INSTALLATION_DIR / etc / düzenleyinorg.ops4j.paxurl.mvn.cfg

    Aşağıdaki iki özelliği güncelleyin -

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

    Note - Lütfen değiştirin $local_repo Mavens settings.xml'de belirtilen yerel deponuzun gerçek yolu ile.

    Çalıştırmak

    Temel yapılandırma değişikliklerini yaptıktan sonra, şimdi Fuse'u başlatabiliriz. Fuse ile çalışacak tüm ikili dosyalar şurada bulunur:$FUSE_INSTALLATION_DIR.

    Fuse'u başlatmanın iki yolu vardır -

    • Kullanma ./fuse

      • Bu, Fuse'u başlattığınız pencerede tüm ilerlemeyi ve günlükleri görmenize olanak sağlar.

      • Aşağıda gösterildiği gibi aynı terminalde size Karaf konsolu verecektir.

    Note- Bu, konsol modunda sigortayı başlatacak, bu da Fuse işleminin, kullanıcı oturumdan çıkış yaptığında veya üretim veya geliştirme senaryosunda arzu edilmeyen Terminal'i kapattığında da durdurulacağı anlamına gelir. Bu komut dosyası yalnızca Fuse'da hata ayıklamak için kullanılmalıdır.

    • Kullanma ./start

      • Bu, ilerlemeyi bile değil, ekranda herhangi bir günlük göstermez, ancak bu Fuse'u arka planda başlatır ve Fuse hizmeti, kullanıcı oturumdan çıktığında veya terminali kapattığında durdurulmaz.

      • Gerçek dünya uygulamasında bu tür davranışlar istenir. Terminali kapatsak bile sigorta arka planda çalışıyor olmalıdır.

      • Arka planda çalışan Fuse'a bağlanmak istiyorsanız, client Aynı klasörde bulunan komut dosyası.

      • Aşağıdaki ekran görüntüsünde gösterildiği gibi ekranı almalısınız.

      • İstemci komut dosyasından çıkmak Fuse hizmetini durdurmaz. Sadece Sigorta konsolunu kapatacaktır.

    HAWTIO

    Fuse ayrıca FMC'yi (Sigorta yönetim konsolu) kullanarak ona tam GUI erişimi sağlar. GUI'yi aşağıdaki URL'de bulabilirsinizhttp://localhost:8181.

    Komutları çalıştırarak yaptığımız her şey, bu tarayıcı tabanlı GUI'ye erişilerek de yapılabilir. Birden fazla konteynerimiz olduğunda ve Fabric ortamında çalıştığımızda son derece yardımcı oluyor.

    Bu bölümde, Apache Karaf'ı ve neden hafif OSGi Konteyner olarak adlandırıldığını, faydaları ve diğer önemli özellikleriyle birlikte tartışacağız.

    JVM Sorunu

    JVM veya Java sanal Makinesi, gerçek bir sanal makine gibi davranmaz. İçerisinde çalışan bileşenleri anında durdurmanıza, başlatmanıza veya yeniden başlatmanıza olanak tanıyan bir makine. Bazen sınıf düzeyinde etkin dağıtımlara izin verebilir, ancak uygulamanızın bir bileşenini yeniden başlatmadan sanal makinenizde dağıtmanın veya dağıtmanın hiçbir yolu yoktur.

    Bu sorunu çözmek ve Java uygulamasında modülerliğe izin vermek için Fuse, Apache Karaf olarak bilinen OSGi tabanlı bir çalışma zamanı kullanır.

    OSGi

    OSGi teknolojisi, java için dinamik bir bileşen sistemi tanımlayan bir dizi özelliktir. Bu özellikler, uygulamaların (dinamik olarak) birçok farklı (yeniden kullanılabilir) bileşenden oluştuğu bir geliştirme modeline izin verir.

    OSGi'nin Faydaları

    • Reduced Complexity - Uygulama, uygulama ayrıntılarını birbirinden gizleyerek karmaşıklığın azalmasına neden olan işbirliği bileşenleri olarak oluşturulmuştur.

    • Reusability - Birçok bileşen, bir konteynerde konuşlandırılan aynı bileşenden yararlanabilir.

    • Deployment - OSGi, konteynerin yeniden başlatılmasına gerek kalmadan yaşam döngüsü yönetimi API'leri ile bileşenlerin anında başlatılması, durdurulması ve güncellenmesi için destek sağlar.

    Paketler Vs Özellikleri

    Aşağıda Paketler ve Özellikler arasındaki karşılaştırma verilmiştir.

    Paketler

    Paketler, JVM için kavanozlar ne ise OSGi ile eşdeğerdir. Paketler, bir OSGi kapsayıcısında konuşlandırılabilir yapılardır. Paketler, bir uygulama oluşturmak için birlikte veya bağımsız olarak çalışan bileşenlerdir.

    Bu paketler, kapsayıcı yeniden başlatılmadan çalışma zamanında yüklenebilir, kaldırılabilir, güncellenebilir, başlatılabilir veya durdurulabilir.

    Özellikleri

    Özellikler, birden çok paketi birlikte dağıtmanın bir yoludur. Bazen paketleri grup halinde dağıtmak daha mantıklıdır. Özellikler, bir grup paketi tek bir komutla dağıtmamıza izin verir.

    Neden başka bir Konteyner?

    Apache Karaf, OSGi tabanlı bir çalışma zamanıdır, Uygulama paketlerimizin çalıştığı yerdir. Fuse, iş işlevselliği sağlamak için paketlerin çalıştığı ve işbirliği yaptığı çalışma zamanı olarak Apache Karaf'ı kullanır.

    Karaf, OSGi Frameworks olan Felix ve equinox üzerine kurulmuştur.

    Karaf Mimarlık

    Apache Karaf, temel OSGi çalışma zamanına aşağıdaki ek işlevleri ekler.

    Sıcak Dağıtım

    Karaf, sıcak dağıtımı destekler. Sıcak dağıtım dizini içerir. Bu dizine yerleştirilen her şey otomatik olarak dağıtılır ve bir paket olarak Karaf'a yüklenir.

    Kerestecilik

    Karaf, içindeki tüm paketler için günlükler oluşturarak merkezi günlük kaydı sağlar. $Fuse_home/data/log. Kaydedici yapılandırmasını şurada düzenleyebiliriz:org.ops4j.pax.logging.cfg içinde $Fuse_home/etc directory.

    Yönetici konsolu

    Karaf, çalışan sigorta örneğiyle etkileşimde bulunmak için gelişmiş ve anlaşılır bir Yönetici konsolu sağlar. Ayrıca, çalışma zamanında bileşenleri (Paket) yönetmek ve izlemek için kullanılabilen önceden yüklenmiş bir komut seti sağlar. Bu konsol genişletilebilir, bu nedenle konsola yeni paketler ekleyerek konsola yeni komutlar eklememize izin verir.

    SSH Erişimi

    Karaf, bu Yönetici konsoluna SSH ile uzaktan erişime izin verir. Geçerli kimlik bilgilerine sahip herkes, SSH terminali üzerinden karaf yönetici konsoluna bağlanabilir.

    Bu bölümde, Apache Camel'in ne olduğunu ve verileri uç noktalar arasında nasıl etkili bir şekilde yönlendirdiğini birkaç örnekle birlikte tartışacağız.

    Apache Camel nedir?

    Apache Camel, 2007'nin başlarında başlatılan açık kaynaklı bir entegrasyon çerçevesidir.

    Kurumsal entegrasyon problemlerini çözmek için kullanılabilecek, kullanıma hazır birçok model uygulaması sağlayan EIP (Enterprise Integration Pattern) tabanlı bir yaklaşımdır. EIP, kurumsal entegrasyonda iyi belgelenmiş ve tekrarlayan sorunlara kanıtlanmış çözümlerden başka bir şey değildir.

    Camel, verileri uç noktalar arasında etkili bir şekilde yönlendirirken, veri formatlarının dönüşümü, uç nokta bağlanabilirliği ve daha pek çok şey gibi ağır yükler aldığı için yönlendirme ve aracılık motoru olarak da bilinir.

    Temel Örnek

    Apache Camel'i kullanmanın ön koşulları şunlardır:

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

    Uygulamanın temel iskeletini oluşturun

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

    Bu, aşağıdaki dizin yapısını oluşturmalıdır.

    Bu, oluşturulan Camel uygulamamızın temel bir iskeletidir.

    Camel-context.xml dosyasını düzenleyin

    Düzenle camel-first-app → src → main → resources → META-INF\spring\camel-context.xml aşağıdaki gibi eşleşecek

    <?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>

    Pom.xml dosyasını düzenleyin

    Aşağıdaki kodu <plugins> </plugins> içine ekleyin

    <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>

    Ambalaj türünü şundan değiştir: jar → bundle.

    <packaging>bundle</packaging>

    Aşağıdaki komutu kullanarak projeyi oluşturun -

    mvn clean install

    Projeyi Sigortaya Yükleyin

    Fuse'u kullanarak başlatın Fuse.bat/start.bat. Fuse'u kullanarak başlatırsanızstart.bat, kullan client.batSigortaya bağlanmak için. Kullanıcı arayüzünü aşağıdaki ekran görüntüsünde gösterildiği gibi almalısınız.

    Bu, Karaf ve Fuse komutlarına erişim için CLI'dır.

    install –s mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT

    Projenizin Çalışıp Çalışmadığını Test Edin

    Şimdi uygulamanız Fuse'a yüklenmelidir. Veri dizinini içine kopyalacamel-first-app ve içine yerleştir D:/src/ ve şehir = Londra mesajını şuraya kopyalamalıdır: D:/target/merssages/uk.

    Giriş dosyasını içine yerleştirin 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

    D'de: / target / messages / uk

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

    D'de: / target / messages / others

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

    Bu bölümde, farklı Deve Kavramlarını anlayacağız. Başlamak için temel kavramları anlamak için temel bir örnek alarak başlayalım.

    CamelContext

    Her deve uygulaması en az bir CamelContext'e sahip olacaktır. Deve rotaları eklediğimiz yer burası. BenzerApplicationContext Baharın.

    Deve bağlamı, her şeyi bir arada tutan bir kap olarak düşünülebilir. Bir deve bağlamının içinde birden fazla yol olabilir.

    Rotalar

    CamelContext bir veya daha fazla yol içerebilir. Rotalar, verilerin deve bağlamında bir uç noktadan diğerine nasıl akacağını tanımlayan entegrasyon mantığıdır.

    Uç nokta

    Uç nokta, sistemin mesaj gönderip alabildiği kanalın sonudur. İletişim dilinde hedef veya kaynak dediğimiz şey budur.

    Bileşenler

    Bileşenler Camel'de bir uzantı noktasıdır. Bileşenler, teknoloji, veri formatı, transformatörler vb. İçin bir arayüz olabilir. Ayrıca uç noktalar için bir fabrika görevi görebilirler.

    EIP

    EIP, Enterprise Integration Pattern anlamına gelir. Bunlar, tekrar eden bir soruna tanımlanmış ve iyi bilinen çözümlerdir. Camel, Kurumsal Entegrasyon Modellerinin çoğunu destekler.

    İçerik Tabanlı Yönlendirici

    CBR modelleri, verileri girdi dosyasının içeriğine göre yönlendirmemize izin verir.

    Bu model, girdi gövdesinin içeriğine bağlı olarak değerleri yönlendirmemiz gerektiğinde kullanılır.

    Aşağıdaki örnek verileri okuyacak D:/data/inputdizin. Okuduktan sonra, veri etiketi içindeki değer etiketini kontrol edecektir. Değer etiketi içeriyorsavalue1, gönderilecek D:/value1, Eğer içeriyorsa value2, gönderilecek D:/value2 ve bunların hiçbiri yoksa başkalarına gönderilecektir.

    <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: / değer1 /

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

    D: / değer2 /

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

    Ayırıcı

    Giriş verilerini daha küçük parçalara ayırmak için bir ayırıcı modeli kullanılır.

    Bu model, çoğu zaman parçalara bölünmesi gereken devasa veri girdileriyle kullanılır, böylece işlenebilir hale gelir. Girdiyi, girdi belirteci dizesine göre daha küçük parçalara böler.

    <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

    AMQ'yu işaretlerseniz, yayınlanan 3 mesaj bulacaksınız.

    <order>
       <data>
          <value>value4</value>
       </data>
    </order>

    Alıcı Listesi

    Bir alıcı listesi kalıbı, bir alıcı listesinin mesaj gövdesinden alınması gerektiğinde kullanılır.

    Aşağıdaki örnekte, müşteri etiketinde virgülle ayrılmış dizeler listesi olarak listelenen tüm alıcılara bir mesaj gönderilecektir.

    <CamelContext xmlns = "http://camel.apache.org/schema/spring">
       <route>
          <from uri = "jms:xmlOrders" />
          <recipientList>
             <xpath>/order/customer</xpath>
          </recipientList>
       </route>
    </camelContext>

    Diğer EIP'ler

    Camel, belirlenen neredeyse tüm EIP'lere destek sağlar. Yaygın olarak kullanılan EIP'nin bazıları aşağıda belirtildiği gibidir.

    • Log - Tam mesajı veya bir kısmını kaydetmek için

    • Message Filter - Mesajların içeriğini filtreleme

    • Re-Sequencer - Tüm jetonları sırayla almak için

    • Wiretap - Seyahat mesajlarını incelemek için

    EIP'nin tam listesi ve kullanımları Camel'in resmi belgelerinde bulunabilir. http://camel.apache.org/eip.html

    Devede Özel Durum İşleme

    Using Error Handler - Bu, devede istisnaları halletmenin en kolay yoludur.

    Bunu kullanmak için, Hata işleyici sınıf fasulyesini yapılandırmalı ve bunu referans olarak sağlamalıyız. CamelContext errorHandlerRef öznitelik.

    <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>

    Sonunda Try Catch'i Kullanma

    Camel ayrıca Java stilini de destekler Try Catch Finally block hata işleme için.

    Tıpkı Java gibi, aşağıdaki üç bloğa sahiptir -

    • doTry blok, istisna oluşturabilecek kod içeriyor.

    • doCatch blok, istisna durumunda yürütülmesi gereken kodu içerir.

    • doFinallyblok, istisnadan bağımsız olarak yürütülmesi gereken bir koda sahiptir. İstisna olursa olsun ya da olmasın her zaman uygulanacaktır.

    Note- Mock, test bileşenidir ve başka amaçlar için önerilmez. Test güdümlü geliştirmede jMOck bileşeni gibi test için kullanılan devede bileşendir.

    <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>

    Yukarıdaki örnekte, catch bloğu tarafından ele alınması gereken istisnaların bir listesini verebiliriz.

    Paketi Fuse'da Dağıtma

    Fuse'u kullanarak başlatın Fuse.bat/start.bat.

    Fuse'u start.bat kullanarak başlatırsanız, Fuse'a bağlanmak için client.bat kullanın. Kullanıcı arayüzünü aşağıdaki ekran görüntüsünde gösterildiği gibi almalısınız.

    Bu, Karaf ve Fuse komutlarına erişim için CLI'dır.

    install –s mvn:group.id /artifact.id/version 
    e.g. install –s mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT

    Bu bölümde, Apache CXF'in ne olduğunu ve SOAP ve Rest Web Servislerini geliştirmede nasıl yardımcı olabileceğini tartışalım.

    Apache CXF nedir?

    Apache CXF, SOAP ve Rest web servislerini geliştirmek için kullanılabilen bir web servisi geliştirme çerçevesidir. CXF, aşağıdakilerle tamamen uyumludur:JAX-RS and JAX-Ws standart.

    Şu anda en yaygın olarak kullanılan web hizmeti geliştirme çerçevesidir. CXF, şimdi kademeli olarak CXF ile değiştirilen Axis2'yi öğrendi ve geliştirdi.

    CXF ve Axis2

    CXF Eksen2
    İyileştirmeler

    CXF şu anda en çok kullanılan çerçevedir.

    Axis2'ye göre çok geliştirmeleri var

    Axis2 yavaş yavaş CXf ile değiştiriliyor.

    CXF'ye kıyasla daha fazla kod gerektirir

    Kod gerekli

    CXF, Axis2'ye kıyasla daha az kod gerektirir

    Axis2, karşılaştırmalı olarak daha fazla kod gerektirir

    Standart Uyum

    CSF, JAX-RS ve JAX-WS ile tamamen uyumludur

    Axis2, JAX-RS ve JAX-WS ile tam uyumlu değildir

    Yay ile uyumlu

    Evet

    Hayır

    Ön uçların ayrılması

    Ön ucun JAX-WS kodundan temiz bir şekilde ayrılması

    Temiz bir ayırma sağlanmadı

    SABUN

    SOAP, Basit Nesne Erişim Protokolü anlamına gelir. İki sistem arasında web servisleri üzerinden yapılandırılmış bilgi alışverişi için bir protokoldür. Verilerin yapılandırılması için çoğunlukla XML'e dayanır ve mesaj görüşmeleri ve iletimi için HTTP veya SMTP kullanır.

    SOAP web servislerini geliştirmek için iki yaklaşım vardır -

    • Code first - Bu yaklaşımda WSDL koddan üretilir.

    • Contract first - Sözleşmede önce, WSDL'den kod üretilir.

    CXF Kullanarak SABUN Geliştirme

    Maven'i yapılandırın

    Aşağıdaki profili Maven'in settings.xml dosyanıza ekleyin.

    <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>

    İskelet Oluştur

    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

    Link aç http://localhost:8181/cxf

    Web hizmeti aşağıdaki şekilde listelenmelidir.

    Testing Web-Service

    mvn -Pclient

    INFO - Hizmet Oluşturma {http://ws.totorials.com/} Com.to sınıfından PersonService

    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] ------------------------------------------------------------------------

    Başlangıç ​​olarak REST, Temsili Devlet Transferi anlamına gelir. Çoğu durumda HTTP olan, durumsuz, önbelleğe alınabilir, istemci-sunucu protokolüne dayalı web hizmetleri geliştirmenin bir yoludur.

    REST web hizmetleri, ağdan veri göndermek, almak ve silmek için HTTP isteklerini kullanır.

    CXF kullanarak REST Geliştirme

    Basit bir Maven hızlı başlangıç ​​projesi oluşturun

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

    Bağımlılık ekleyin

    <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>

    Derleme Talimatı Ekle

    <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>

    Fuse Eklenti Depoları Ekle

    <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>

    Kod Depoları Ekle

    <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>

    Hizmet Sınıfı Oluşturun

    Com / tuts / altında UserService.java sınıfı oluşturun

    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;
       }
    }

    Blueprint.xml oluşturun

    / Src / main / resources / OSGI-INF / blueprint blueprint.xml altında blueprint.xml oluşturun

    <?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>

    Sigortaya Dinlenme servisini yükleyin

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

    Paketin Kayıtlı Web Hizmeti olup olmadığını kontrol edin

    Link aç http://localhost:8181/cxf

    Web Hizmetini Test Et

    Link aç http://localhost:8181/cxf/users12/UserService_1/get_data

    Bu bölümde, ActiveMQ ve uygulamaların birbirleriyle iletişim kurmasına izin vermek için nasıl bir mesaj aracısı olarak davrandığını öğreneceğiz.

    AMQ nedir?

    ActiveMQ, Java ile yazılmış açık kaynaklı bir mesaj aracısıdır. JMS 1.1 standartlarıyla tamamen uyumludur.

    JMS, mesaj tabanlı sistemin geliştirilmesine izin veren bir özelliktir. ActiveMQ, uygulamalar arasında yer alan ve asenkron ve güvenilir bir şekilde iletişim kurmalarına izin veren bir mesaj aracı görevi görür.

    Mesajlaşma Türleri

    Daha iyi anlamak için aşağıda açıklanan iki tür mesajlaşma seçeneği vardır.

    Noktadan Noktaya

    Bu tür bir iletişimde, komisyoncu sadece bir tüketiciye mesaj gönderirken, diğer tüketiciler komisyoncudan mesajları alana kadar bekler. Hiçbir tüketici aynı mesajı almayacaktır.

    Müşteri yoksa, Broker bir tüketiciyi alana kadar mesajları saklayacaktır. Bu tür iletişim aynı zamandaQueue based communicationYapımcının bir kuyruğa mesaj gönderdiği ve yalnızca bir tüketicinin kuyruktan bir mesaj aldığı. Birden fazla tüketici varsa, bir sonraki mesajı alabilirler ancak diğer tüketici ile aynı mesajı alamazlar.

    Yayınla / Abone Ol

    Bu tür iletişimde, Broker tüm aktif tüketicilere mesajların aynı kopyasını gönderir. Bu tür iletişim aynı zamandaTopic based communicationBroker, belirli bir Konu için abone olan tüm aktif tüketicilere aynı mesajı gönderir. Bu model, iletilen mesajların doğrulanmasının beklenmediği tek yönlü iletişimi destekler.

    Kuyruk ve Konu Oluşturma

    Sigorta, ActiveMQ ile birlikte gelir. ActiveMQ'ya FMC konsolunu (AMQ ile çalışmak için tarayıcı tabanlı arayüz) kullanarak erişebiliriz.

    FMC'ye giriş yapın localhost:8181 ve seçin ActiveMQ sekmesi.

    • + Oluştur'a tıklayın
    • Sırayı / Konu adını girin
    • Radyo düğmesinden Sırayı / Konuyu seçin
    • Sıra Oluştur / Konu oluştur'a tıklayın

    Şimdi görebilmelisin TestQ kök → Sıra → altında oluşturuldu

    Oluşturulan konuyu kontrol etmek için, kök → Konuyu takip edin.

    Kuyruk İçeriğine Göz Atma / Silme

    • FMC'ye giriş yapın localhost:8181

    • ActiveMQ sekmesini seçin

    • Kök → Sıra → TestQ <göz atmak istediğiniz sırayı seçin> → Gözat

    • Bu mesajın içeriğini kontrol etmek için o mesaja tıklayın.
    • Sağ üst köşede gösterilen Sil düğmesine tıklayarak belirli bir mesajı silebilirsiniz.

    Bu bölümde, ActiveMQ'nun Camel ile nasıl çalıştığının temellerini öğreneceğiz.

    ActiveMQ Bileşenine Yapılandırma

    Kodumuzda ActiveMQ kuyruğunu veya konusunu kullanmadan önce ActiveMQComponent'i yapılandırmamız gerekiyor. ActiveMQComponent'in minimum yapılandırması aşağıdaki programda gösterildiği gibi yapılabilir -

    <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 - AMQ Broker için ana bilgisayarı ve bağlantı noktasını belirtir.

    • username - AMQ Broker'a bağlanmak için kullanılacak kullanıcı adını belirtir.

    • password - AMQ Broker'a bağlanmak için şifreyi belirtir.

    Sıraya Bağlanma

    Artık ActiveMQComponent'i yapılandırdığımıza göre, onu CamelContext'imizde uç nokta olarak kullanabiliriz.

    AMQ uç noktasını aşağıdaki biçimde kullanacağız -

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

    AMQ'ya Mesaj Yazma

    <?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">

    Bu paketi Fuse kapsayıcısında dağıttıktan sonra, AMQ'ya gönderilen ve dosya olarak yerleştirilen mesajları görebilmelisiniz. D:/src/data.

    Input

    D: /src/data/input.txt

    Test me

    Output

    AMQ'dan okuma

    <?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

    Bu paketi dağıttıktan sonra, D: / src'de bir dosyanın oluşturulduğunu ve mesajların tüketildiğini görmelisiniz. Ayrıca o Kuyruk için Tüketici gösterilmelidir.

    Output

    D: / src

    Test me

    Konuya Yazmak

    <?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>

Konudan Okuma

<?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>

Kumaş nedir?

Fabric, birden çok Fuse örneği için yönetim ve düzenleme yetenekleri sağlar. Fabric, kendisine bağlı tüm Fuse örneklerini tek bir noktadan kontrol etmemizi sağlar. Normal bir Sigorta kabı, Kumaş görevi görecek şekilde dönüştürülebilir. Fabric, içinde konteynerlerle ilgili tüm bilgileri içeren veri deposu olarak hizmet veren kumaş kayıt defterine sahiptir, yönetir.

Neden Kumaş?

Fabric, dağıtılmış ortamlarda kullanım için ideal bir aday olmasını sağlayan aşağıdaki özel yeteneklere sahiptir.

  • Kumaştaki tüm kapların durumunu izleme.
  • Uzak konteynerleri başlatma ve durdurma.
  • Belirli bir uygulamayı çalıştırmak için uzak kapsayıcı sağlar.
  • Canlı sistemde uygulamaları yükseltme ve yamaları yayma.
  • Örneğin sistemdeki artan yük ile başa çıkmak için hızlı bir şekilde yeni konteynerlerle başlatma ve tedarik etme.

Kumaş Kurulumu

Kumaş Oluşturmak

Normal Sigorta kabı aşağıdaki komut kullanılarak Yapıya dönüştürülebilir

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

Diğer konteynerin Fabric'e bağlanması -

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

Note - Lütfen <fabric_host> 'u yapının üzerinde çalıştığı gerçek ana bilgisayar adıyla değiştirin.

Tarayıcınızdan Fuse Management Console'a giriş yaptığınızda localhost:8181, aşağıdaki ekran görüntüsünde gösterildiği gibi iki kapsayıcı görebilmeniz gerekir. Kumaş kapsayıcı, önünde küçük bir bulut simgesiyle gösterilir.

Profiller

Bir Profil aşağıdaki bilgileri içerir -

  • Yüklenecek paketler
  • Yüklenecek özellikler
  • Uygulanacak konfigürasyonlar

Bir Profil, yapı ortamında aynı demetleri, özellikleri ve yapılandırmayı birden çok sunucuya kurmak için bir yol sağlar.

Aynı profil birden çok kapsayıcıya uygulanırsa ve bu profilde herhangi bir kapsayıcıdan değişiklik yaparsak, benzer değişiklikler, uygulandığı diğer kapsayıcılara otomatik olarak dağıtılacaktır.

Profil Oluşturma

  • FMC'ye giriş yapın localhost:8181

  • Çalışma Zamanı → Yönet

  • Sol tarafta Profil menüsünün altındaki +

Profile vermek istediğiniz adı girin ve oluştur'a tıklayın.

Bundan sonra profil oluşturulmalıdır.

Profilin Kapsayıcıya Uygulanması

Çalışma Zamanı → Kapsayıcılar → kök (istediğiniz kabı seçin)

Tıklayın Addbu bir açılır kutuya yol açacaktır. İstediğiniz profili arayın ve ardından tekrar tıklayın.Add.

Profil, aşağıdaki ekran görüntüsünde gösterildiği gibi listede gösterilmelidir.

Bir Paketi Dağıtmak

Bir paketi dağıtmak için aşağıdaki yolu kullanın -

Çalışma Zamanı → Kapsayıcılar → kök (istediğiniz kabı seçin) → First_profile (profili seçin)

Paketler sekmesini tıklayın. Paket yolunu aşağıdaki biçimde ayarlayın ve ardından+.

mvn:group.id/artifact.id/version

Örneğin: mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT

Profile bir paket eklenecek ve profilin atandığı tüm kapsayıcılara dağıtılacaktır.

Bir Paketi Dağıtma

Bir paketi dağıtmak için aşağıdaki yolu kullanın -

Çalışma Zamanı → Kapsayıcılar → kök (istediğiniz kapsayıcıyı seçin) → First_profile (profili seçin)

Paketler sekmesine tıklayın ve silmek istediğiniz paketi arayın ve ardından X. Paket, profilin uygulandığı tüm kapsayıcılardan silinecektir.

Bir Alt Konteyner, artan yükü yönetmenin en kolay yolunu sağlar. Sistem trafikte ani bir yük yaşadığında ve tek bir konteyner yük ile baş edemediğinde, tamamen yeni bir konteyner oluşturmak yerine kolayca bir dizi alt konteyner oluşturabilir ve yükü bunlar arasında dağıtabiliriz.

Bir Alt Kapsayıcı Oluşturma

FMC'ye giriş yapın localhost:8181

Şimdi şu yolu izleyin: Runtime → container → + Create (sağ taraftaki düğme)

Çocuk adı, üst kapsayıcı örnek sayısı gibi ayrıntıları girin.

Tıklayın Create And Start Container

Bir Alt Kapsayıcıyı Yönetme

Bir Alt kap, yalnızca normal bir kap görevi görür.

Bir Alt Konteynerin Durdurulması

Bir alt kapsayıcıyı durdurmak için şu yolu izleyin: Runtime → Container → Child1

Alt Kap'ı durdurmak için Durdur'a tıklayın.

Bir Alt Konteyner Başlatma

Bir alt kapsayıcı başlatmak için şu yolu izleyin: Runtime → Container → Child1

Alt kapsayıcıyı başlatmak için Başlat'ı tıklayın.

Bu bölümde, Fuse ile çalışırken karşılaşabileceğiniz bilinen birkaç sorunu tartışacağız. Ayrıca bu sorunları nasıl aşabileceğinizi de tartışacağız.

Kod Değişiklikleri Yansıtılmaz

Bir istemci komut dosyası kullanarak Fuse örneğine bağlanın. Aşağıdaki komutu kullanarak bir sorunla karşılaştığınız paketi arayın.

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 - Yukarıdaki komutun çıktısından paket için paket kimliği ve aşağıdaki komutu kullanın.

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

Paket İndirilmiyor

Aşağıdaki iki nedenden dolayı olabilir -

  • Maven deposu belirtilmedi
  • Paket depoda yok

Maven Deposu Belirtilmemiş

Maven, Fuse yapıları oluşturmak için kullanılan yerleşik bir araçtır. Fuse, yapıyı yüklemek için komut verdiğimizde ilk olarak yapay nesneler için Maven yerel deposunda arama yapar. Bu yüzden Fuse'a Maven'in nerede kurulu olduğunu ve Mavens yerel deposunun yolunu bilmesini sağlamalıyız.

$ FUSE_INSTALLATION_DIR / etc / düzenleyinorg.ops4j.paxurl.mvn.cfg

Aşağıdaki iki özelliği güncelleyin -

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

Note - Lütfen $ local_repo'yu Mavens settings.xml'de belirtilen yerel deponuzun gerçek yolu ile değiştirin

Paket Depoda Mevcut Değil

Maven ayarları uygulandıysa ancak paketi indirirken yine de sorunlarla karşılaşırsanız, paketlerin JAR Maven Deposunda doğru konumda mevcuttur.

Örneğin, aşağıdaki paket indirme sırasında hata veriyorsa -

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

Gerçek JAR varsa $ M2_REPO / com / tutorialpoint / app / camel-first-app / 1.0-SNAPSHOT'a bakmamız gerekiyor.

Note - $ M2_REPO'nun, Fuse'u kullanmak üzere yapılandırdığımız Maven deposunun gerçek yolu ile değiştirilmesi gerekiyor.

FMC'ye (Tarayıcı tabanlı GUI) Giriş Yapılamıyor

Users not Created - Aşağıdaki kullanıcı arayüzünü alıyorsanız ancak "Oturum açılamadı, Yasak" mesajıyla oturum açamıyorsanız.

İçine kullanıcı ekleyip eklemediğinizi kontrol edin $FUSE_INSTALLATION_HOME/etc/users.properties

Kullanıcı eklemek için doğru biçim -

Username = Password,Role

HAWTIO Bağlantı Noktası Farklı

Kullanıcı arayüzünü tarayıcıda localhost: 8181'den bile alamıyorsanız, URL'de doğru bağlantı noktasından bahsedip bahsetmediğinizi kontrol edin.

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

Erişmek istediğiniz bağlantı noktasını kullanmak için dosyada aşağıdaki özelliği düzenleyin.

org.osgi.service.http.port=8181

AMQ Broker çalışmıyor

61616 bağlantı noktasının açık olduğundan ve şu anda başka bir bağlantı noktası tarafından kullanılmadığından emin olun. Varsayılan 61616 bağlantı noktasını aynı şekilde değiştirmek isterseniz, bunu şurada düzenleyebilirsiniz:$FUSE_INSTALLATION_HOME/etc/System.properties

activemq.port = 61616