Apache Deve tam olarak nedir?


1360

Camel'in tam olarak ne yaptığını anlamıyorum .

101 kelimede Deve'ye bir giriş yapabilirseniz:

  • Tam olarak nedir?
  • Java ile yazılmış bir uygulama ile nasıl etkileşimde bulunur?
  • Sunucu ile birlikte giden bir şey mi?
  • Bağımsız bir program mı?

Lütfen Deve'nin ne olduğunu açıklayın.

Yanıtlar:


719

5 ila 10 dakikanız varsa, genellikle insanların Jonathan Anstey'in Apache Camel ile Entegrasyonunu okumasını tavsiye ederim . Camel'in bazı kavramlarına kısa bir giriş ve genel bakış sağlayan iyi yazılmış bir parça ve kod örnekleri ile bir kullanım örneği uygular. İçinde Jonathan şöyle yazıyor:

Apache Camel, entegrasyonu geliştiriciler için daha kolay ve erişilebilir hale getirmeye odaklanan açık kaynaklı bir Java çerçevesidir. Bunu aşağıdakileri sağlayarak yapar:

  • yaygın olarak kullanılan tüm Kurumsal Entegrasyon Kalıplarının (EIP) somut uygulamaları
  • çok çeşitli taşıma ve API'lara bağlantı
  • EIP'leri ve aktarımları birbirine bağlamak için Kullanımı Kolay Etki Alanına Özel Diller (DSL)

İlk bölümde Camel'i tanıtan ücretsiz bir Camel Eylem bölümü de var. Jonathan benimle birlikte bu kitapta ortak yazar.


55
Deve in Action kitabı, Camel'in temel özelliklerini ve bazı karmaşık özelliklerini nasıl kullanacağınızı öğrenmek için çok iyi bir kitap. Şiddetle tavsiye ederim! (Hiçbir şekilde kitap veya yayıncıya bağlı değilim)
Matt Aldridge

2
@ Katır ESB ve Deve arasında seçim yapmak istiyorsanız. diğerini seçerken benim yıkım ne olmalı
kuhajeyan

8
Camel.apache.org/articles.html adresindeki Deve rakipleriyle karşılaştırırken bazı bağlantılara bakın .
Claus Ibsen

1
Evet kesinlikle mikro hizmetlerin bağlanması için kullanılabilir, sonuçta sadece küçük bir Java araç seti / çerçevesi. Deve Eylem 2. baskı kitabında Deve mikro hizmetleri hakkında tam bir bölüm bulunmaktadır.
Claus Ibsen

1
İstediğiniz "Kurumsal Entegrasyon Kalıpları (EIP)" nedir? Öğrenmek için tek yapmanız gereken "Kitap Entegrasyon Kalıpları Satın Al ..."
Jose Quinteiro

1130

Bunu daha erişilebilir bir şekilde tanımlamak için ...

Apache Camel'in ne olduğunu anlamak için Kurumsal Entegrasyon Kalıplarının ne olduğunu anlamanız gerekir.

Muhtemelen bildiğimiz şeylerle başlayalım: Singleton deseni, Fabrika deseni, vb; Onlar sadece sizin sorununuzu çözme biçiminizi organize etmenin bir yoludur, fakat kendileri de çözüm değildirler. Bu kalıplar, Tasarım Çeteleri adlı kitaplarını yayınladıklarında, Dörtlü Çetemiz tarafından analiz edildi ve çıkarıldı . Bazılarımızı, kodumuzu en iyi nasıl yapılandıracağımızı düşünmek için muazzam çaba sarf ettiler.

Dörtlü Çete gibi Gregor Hohpe ve Bobby Woolf, Enterprise Integration Patterns (EIP) kitabını , bileşenlerin olabileceği büyük bileşen tabanlı sistemleri en iyi nasıl tasarlayabileceğimize dair bir dizi yeni desen ve plan önerdiler ve belgelediler . aynı işlemde veya farklı bir makinede çalışıyor.

Temel olarak sistemimizi mesaj odaklı olacak şekilde yapılandırmamızı öneriyorlar - burada bileşenler girdi ve çıktı olarak mesajlar kullanarak birbirleriyle iletişim kuruyorlar ve kesinlikle başka bir şey yok. Bize, tüm sistemi birlikte oluşturacak farklı bileşenlerimizde seçebileceğimiz ve uygulayabileceğimiz eksiksiz bir desen seti gösteriyorlar.

Peki Apache Deve nedir?

Apache Camel, EIP'lere, temel nesnelere, yaygın olarak ihtiyaç duyulan uygulamalara, hata ayıklama araçlarına, bir yapılandırma sistemine ve EIP'leri takip etmek için çözümünüzü uygulamak istediğinizde size zaman kazandıracak birçok yardımcıya arabirimler sunar.

MVC'yi alın. MVC teoride oldukça basittir ve bunu herhangi bir çerçeve yardımı olmadan uygulayabiliriz. Ancak iyi MVC çerçeveleri bize kullanıma hazır yapı sağlar ve ekstra mil kat etti ve büyük bir MVC projesi oluştururken ihtiyacınız olan diğer "yan" şeyleri düşündük ve bu yüzden onları çoğu zaman kullanıyoruz.

EIP'ler için Apache Camel tam da budur. EIP'leri takip etmek için çözümlerini uygulamak isteyen insanlar için üretime hazır eksiksiz bir çerçeve.


183
Bu muhtemelen sorunun en iyi cevabıdır. Diğer tüm cevaplar internetteki diğer makaleler kadar kafa karıştırıcıdır
Nerrve

19
EIP anahtardır. EIP'yi anlamıyorsanız, Deve'yi kör adamlar ve fil (deve) gibi kullanabilirsiniz. EIP - eaipatterns.com
hutingung

22
Bu cevap için +50 - EIP'ye girişten başlayıp GOF ve MVC ve çerçevelerle benzetme. Sorudan, OP'nin EIP fikri olmadığı anlaşılıyor. Bu cevabı okumadan önce aynı teknedeydim
Öğrenci

6
Bu açıklama, soruyu cevapladığı için Apache Camel ana sayfasına ve ardından bazılarına eklenmelidir. MVC'nin el yazısı ile analojisini kullanması ya da bu cevabı yapmaya yardımcı olmak için bir 'araç' kullanmasıyla ilgili olarak, gerekli olan her şey bu özlü olduğunda sonsuz diğer (yararlı) bağlantılar arasında dolaşmak zorunda kalmadan bana bir anlayış verdi. Cevap.
Azkuma

2
Biraz EIP problemleri: "Yıllar boyunca entegrasyona yardımcı olacak birçok kütüphane ve çerçeve vardı. Ancak Kurumsal Entegrasyon Kalıplarının ardındaki kavramlar, birlikte kablolanması gereken bazı karmaşık sınıf hiyerarşilerine veya nesnelerine dönüşüyor ve orijinal niyetleri ve kalıpları genellikle kayboluyor. O zamandan itibaren geliştirici düşük seviyeli ayrıntıya ve bazı karmaşık sınıf kütüphanesi API'sine odaklanarak daha büyük resmi ve kalıpları kaybetmeye zorlanıyor. "
Quan Nguyen

659

Proje tanımı oluşturmak karmaşık olmamalıdır.

Diyorum:

Apache Camel, yönlendirme ile mesajlaşma teknolojisi tutkalı. Farklı kaynaklardan farklı hedeflere mesajların aktarılmasını sağlayan mesajlaşma başlangıç ​​ve bitiş noktalarını birleştirir. Örneğin: JMS -> JSON, HTTP -> JMS veya huni FTP -> JMS, HTTP -> JMS, JSON -> JMS

Wikipedia diyor ki:

Apache Camel, yönlendirme ve uyumlulaştırma kurallarını yapılandırmak için bir API (veya bildirimsel Java Etki Alanına Özel Dil) kullanarak Enterprise Entegrasyon Kalıplarının Java nesnesi tabanlı bir uygulamasını sağlayan kural tabanlı bir yönlendirme ve uyumlulaştırma motorudur. Etki alanına özgü dil, Apache Camel'in büyük miktarda XML yapılandırma dosyası olmadan düzenli Java kodu kullanarak IDE'nizdeki yönlendirme kurallarının tür güvenli bir şekilde tamamlanmasını destekleyebileceği anlamına gelir; ancak Spring içindeki XML yapılandırması da desteklenir.

Görmek? Zor değildi, değil mi?


307
Apache Camel ana sayfası bu konuya atıfta bulunuyor ... Kendi ürünlerinin kısa bir işlevsel açıklamasını yapmayı başaramadılar.
youri

15
Bu makale yapıcı eleştirilerin ve dürüst çabaların nasıl yüce belgeler oluşturabileceğinin en iyi örneğidir. Resmi Camel web sitesinde yer almaktadır. Ancak yapıcı kalalım ve ad etiketlemekten kaçınalım. Belgeleme yazarları ve diğer katılımcıları bulmak bazen zordur ve saygımızı hak ederler. BTW - birçok java kodlama standardımız var ... ve gurur ve onur ile devam ediyoruz ... Wiki ve resmi Rehberler gibi medya için bir dokümantasyon standardına ne dersiniz?
YoYo

1
İnce taneli ters proxy gibi mi?
Asad Hasan

1
Bu yanıtı Deve ana sayfası bağlantısı aracılığıyla buldum. Beni doğrudan sayfalarında alıntılamadıklarını, hatta belirli bir cevaba bağlanmadığını aptallaştırıyorlar.
Jelling,

9
Şimdi, buna berrak ve nokta cevabı diyorum. Garip bir şekilde, kabul edilen cevap bir reklama benziyor. +1
EMM

120

Kısacası:

Sistemleri bağlamak / entegre etmek için bir gereksinim olduğunda, muhtemelen bazı veri kaynaklarına bağlanmanız ve ardından bu verileri iş gereksinimlerinize uyacak şekilde işlemeniz gerekecektir.

Bunu yapmak için:

1) Bunu yapacak özel bir program geliştirebilirsiniz (zaman alıcı ve anlaşılması zor olabilir, diğer geliştiriciler için bakım yapabilirsiniz)

2) Alternatif olarak, standart bir şekilde yapmak için Apache Camel'i kullanabilirsiniz (sizin için zaten geliştirilmiş konektörlerin çoğuna sahiptir, sadece kurmanız ve işlem adı verilen mantığınızı takmanız gerekir):

Deve size şu konularda yardımcı olacaktır:

  1. Herhangi bir kaynaktan / formattan veri tüketme
  2. Bu verileri işleyin
  3. Herhangi bir kaynağa / formata veri çıkışı

Apache Camel'i kullanarak sisteminizi anlamayı / sürdürmeyi / başka bir geliştiriciye genişletmeyi kolaylaştıracaksınız.

Apache Camel, Kurumsal Entegrasyon Kalıpları ile geliştirilmiştir. Desenler sistemleri iyi bir şekilde entegre etmenize yardımcı olur :-)


Bu, diğer geliştiricilerin mantığı başka bir programlama dilinde de değiştirebileceği anlamına mı geliyor?
JavaTechnical

1
@JavaTechnical mesajlaşma düzeni (EIP) göz önüne alındığında, farklı iletilerdeki farklı bileşenleri zaten kodlayabilirsiniz çünkü bu mesajlar JSON gibi dilden bağımsız formatlardadır. Deve, EIP'yi uygulamak için kolay bir çerçeve sağlar. Bu benim anlayışım üzerine kuruludur. Lütfen yanılıyorsam beni düzeltin.
Dheeraj Bhaskar

98

Deve A'dan B'ye mesaj gönderir:

resim açıklamasını buraya girin

Neden bunun için bütün bir çerçeve? Peki ya sahipseniz:

  • birçok gönderici ve birçok alıcı
  • protokollerin bir düzine ( ftp, http, jmsvs.)
  • birçok karmaşık kural
    • Sadece A ve B Alıcılarına A mesajı gönderin
    • Alıcı C'ye bir mesaj B gönder XML olarak , ancak kısmen tercüme , onu zenginleştirmek onu (eklenti meta verileri) ve koşul X IF sonra da Alıcı D göndermeyeceğim ama, CSV olarak .

Şimdi ihtiyacınız var:

  • protokoller arasında çeviri yap
  • bileşenleri yapıştırmak
  • rotaları tanımla - nereye gidiyor
  • bazı durumlarda bazı şeyleri filtrele

Deve size kutudan yukarıdakileri (ve daha fazlasını) sunar:

resim açıklamasını buraya girin

neyi ve nasıl olduğunu tanımlamanız için harika bir DSL diliyle:

  new DefaultCamelContext().addRoutes(new RouteBuilder() {
        public void configure() {
            from("jms:incomingMessages")
                    .choice() // start router rules
                    .when(header("CamelFileName")
                            .endsWith(".xml"))
                    .to("jms:xmlMessages")
                    .when(header("CamelFileName")
                            .endsWith(".csv"))
                    .to("ftp:csvMessages");
}

Ayrıca bu ve bu ve Deve Eylem (diğerleri söylediler, mükemmel bir kitap!)


75

Bir diyagram binlerce tanımdan daha iyidir. Bu Diyagram Deve mimarisini göstermektedir.

resim açıklamasını buraya girin


55

ANALOJİYE DAYALI

Deve tabanlı yönlendirme, kendinizi bir Havayolu sahibinin yerine koyarak kolayca anlaşılabilir (örn. American Airlines, Jet Airways).

'Havayolu şirketinizin' amacı, 'yolcuları' bir 'şehir'den diğerine' taşımak'tır. Yolcu taşımak için Boeing, Airbus, HAL gibi farklı 'uçak şirketlerinden uçakları kullanıyorsunuz.

Havayolunuzun panoları, şehirden 'havalimanlarını' kullanarak yolcuları ve havaalanını şehre kullanarak oradan atar. Bir yolcu birden fazla şehre 'seyahat edebilir', ancak her yerde havayolunuzun uçağı ve şehir arasında seyahat etmek için havaalanından geçmeleri gerekir.

Şehirden 'ayrılan' bir yolcunun esasen havayollarınızın uçağına 'geldiğini' unutmayın. Ve şehre 'gelen' bir passeger aslında uçaktan hareket ediyor. Havayolu sahibinin yerinde olduğumuzdan, 'varış yolcusu' ve 'çıkış yolcusu' terimi şehirler perspektifine dayanan konvansiyonel kavramlarımızdan tersine çevriliyor.

Her şehrin aynı 'havaalanı' altyapısı 'çıkış yapan' ve 'gelen' yolcular tarafından kullanılır. Bir havalimanı, giden yolcular için sağlanan 'geliş altyapısından' farklı olan 'çıkış altyapısı' sağlar.

Yolcular, seyahat ederken uçaklarınız tarafından uçağın içinde sunulan çeşitli 'kolaylıklar' nedeniyle etkinliklerine devam edebilirler.

Bunun da ötesinde, havayolu şirketiniz 'yerel dili anlama' ve ya da 'seyahat' için hazırlanma gibi özel tedaviler için salon olanakları da sunmaktadır.

Yukarıda kullanılan birkaç kelimeyi / ifadeyi aşağıdaki ile değiştirelim:

havayolu şirketi: Apache Camel

uçak şirketleri: Nakliye mekanizmaları

havayolu şirketinizin uçağı: Apache Camel'in temel taşıma mekanizması

taşıma: rota

yolcular: mesaj;

şehir: sistem;

havaalanı: Deve Bileşeni;

yerel dilleri anlama: Tür Dönüşümleri;

çıkış: üreten, üretilen

gelen: tüketen, tüketilen

seyahat: yönlendirilmiş

olanaklar: sağlanan

Kelimeleri değiştirdikten sonra, elde edeceğiniz şey:

'Apache Camel'in amacı ' mesajları 'bir' sistemden 'dünyadaki diğerine yönlendirmektir. Apache devesi mesaj yönlendirme için farklı taşıma mekanizmaları kullanır.

Apache Camel, 'from' sisteminin 'Camel tabanlı Bileşeni'ni kullanarak mesajları alır ve' to 'sisteminin' Camel tabanlı Bileşeni'ni kullanarak bırakır. Bir mesaj birden fazla sisteme yönlendirilebilir, ancak her yerde 'Apache Camel'in temel taşıma mekanizması' ve sistem arasında seyahat etmek için 'Deve tabanlı Bileşenler' içinden geçmeleri gerekir.

Sistemden 'üretilen' bir mesajın esasen Apache Camel'in altında yatan taşıma mekanizmasına 'tüketildiğini' unutmayın. Ve bir sistem tarafından tüketilen bir mesaj, esasen 'Apache Camel'in altında yatan taşıma mekanizması' tarafından üretilir.

Camel'i anlamaya çalıştığımızdan, Develerin bakış açısından buradan düşünmeliyiz. Bu nedenle, 'tüketici mesajı' ve 'üretici mesajı' terimlerinin anlamı, sistemin bakış açısına dayanan geleneksel kavramlarımızdan tersine çevrilir.

Aynı 'Deve tabanlı Bileşen' kodlama altyapısı 'üretici mesajı' ve 'tüketici mesajı' tarafından kullanılır. 'Deve tabanlı Bileşen', 'üretici mesajı' için bir 'üretici uç noktası' ve 'tüketici mesajı' için 'tüketici uç noktası' sağlar.

Mesajlar yönlendirilirken Deve tarafından işlenebilir.

Bu yönlendirme üzerine Camel, 'Tür Dönüştürme' ve daha pek çok özellik sunuyor ...


Büyük açıklama okumak güzel ve hatırlaması kolay. Devede bile olsa, hangi pistin veya pilotun rolünü merak ediyorum.
Stimpson Cat

Güzel açıklama özel Havaalanı örneği devam et. Birkaç daha genişletilmiş terim eklediyseniz ve kod örneğinin bir parçası gerçekten harika olurdu! Teşekkürler
Ankur Nirmalkar

50

Apache Camel'i anlamaya çalışmadan önce anlamanız gereken şeylerden biri Kurumsal Entegrasyon Kalıplarıdır. Sahadaki herkes aslında bunların farkında değil. Enterprise Integration Patterns (Kurumsal Entegrasyon Kalıpları) kitabını kesinlikle okuyabilmenize rağmen, bunlara hız vermenin daha hızlı bir yolu, Kurumsal Uygulama Entegrasyonu hakkındaki Wikipedia makalesi gibi bir şey okumak olacaktır .

Konu alanını okuduğunuz ve anladığınız bir kişi, Apache Camel'in amacını anlama olasılığınız çok daha yüksek

HTH


35

Kurumsal Entegrasyon Kalıplarının farkındaysanız, Apache Camel tüm EIP'leri uygulayan bir entegrasyon çerçevesidir.

Ve Camel'i bir web kapsayıcısında bağımsız bir uygulama olarak dağıtabilirsiniz.

Temel olarak, birkaç uygulamayı farklı protokoller ve teknolojilerle entegre etmeniz gerekiyorsa, Camel'i kullanabilirsiniz.


22

Başka bir açıdan tanım:

Apache Camel bir entegrasyon çerçevesidir. Java platformunda entegrasyon sorunlarını uygulamanıza yardımcı olan bazı Java kitaplıklarından oluşur. Bunun anlamı ve bir taraftaki API'lardan ve diğer taraftaki Kurumsal Hizmet Veri Yolu'ndan (ESB) farkı "Makam ne zaman Apache Camel kullanılır? "


18

Tam olarak nedir?

Apache Camel , tüm Kurumsal Entegrasyon modellerini uygulayan hafif bir entegrasyon çerçevesidir.Gerekli modelleri kullanarak farklı uygulamaları kolayca entegre edebilirsiniz.

Java, Spring XML, Scala veya Groovy kullanabilirsiniz. Hayal edebileceğiniz hemen hemen her teknoloji mevcuttur, örneğin HTTP, FTP, JMS, EJB, JPA, RMI, JMS, JMX, LDAP, Netty vb.

Bu makaleye ve EIP kalıp makalesine bir göz atın

Java ile yazılmış bir uygulama ile nasıl etkileşimde bulunur?

Camel, aşağıda listelendiği gibi çeşitli etki alanına özgü dillerde Kurumsal Entegrasyon Kalıpları veya Rotaları oluşturmak için Java Etki Alanına Özel Dil veya DSL kullanır .

Java DSL - Akıcı oluşturucu stilini kullanan Java tabanlı bir DSL.

Kurumsal Entegrasyon Kalıbının hikayesi şu kavramlar etrafında çözülmektedir:

Mesaj, Bitiş Noktası, Yapımcı, Tüketici, Yönlendirme, Otobüs, Dönüştürme ve İşleme .

Anirban Konar'ın gerçek zamanlı kullanım durumlarından biri için bu makaleye göz atın .

Sunucu ile birlikte giden bir şey mi?

Birden çok kurumsal alt sistem arasında bir köprü görevi görür.

Bağımsız bir program mı?

Bir entegrasyon çerçevesi olan Apache Camel, farklı bağımsız uygulamaları entegre eder.

Devenin en büyük avantajı : Her entegrasyon için aynı kavramları kullanarak farklı uygulamaları farklı teknolojilerle (ve farklı protokollerle) entegre edebilirsiniz.


Acaba neden "hafif" kelimesini kullanıyorsunuz. Benim gözlemim Apache Camel'in aslında ağır olduğu.
Krzysztof Tomaszewski

13

Bilgi işlemdeki "yeni" şeylerin çoğu gerçekten yeni değildir, onlar zaten iyi anlaşılmış bir şeyin etrafında gizemli bir pakettir. Ne zaman biri yeni dil terimleri icat karar ya da farklı bir amaç için mevcut koşullar kolonize çünkü genellikle, yaptıkları (iyi bir örnek anlamak zor olduğunu neyi 'istemci' ve 'server' ortalama X geliştiricilerinin geri adım anlamına geliyor.)

Deve, uygulamalar arası ara katman yazılımı için Java tabanlı bir paketleyicidir.

Ara katman yazılımı, ortak bir dili veya veri türlerini paylaşmayan varlıklar arasında yorumlama hizmetleri sağlayan genel bir terimdir.

Altta Deve böyle. EIP tipi ara katman yazılımı sağladığını belirterek açıklamayı yapabiliriz.

Uygulamaların iletişim kurması gerekenlerin ayrıntılarını bilemediğinden, ara katman yazılımının kendisini sağlamaz. Ancak, bu ara katman yazılımının değişmez kısımlarını oluşturmak için API sağlar (bir başlangıç ​​noktası oluşturun, bir bitiş noktası oluşturun, başlangıç ​​ve bitiş için koşullar oluşturun, vb.)

Umarım yardımcı olur.


4
"Bilgi işlemdeki çoğu" yeni "şey gerçekten yeni değil, onlar zaten iyi anlaşılmış bir şeyin etrafında gizemli bir paket." <<<< Bütün hafta okuduğum en iyi şey!
Dave

8

İşte başka bir girişim.

Webmethods, ICAN Seebeyond, Tibco BW, IBM Broker gibi şeylerin nasıl olduğunu / olduğunu biliyorsunuz. Hepsi kuruluştaki entegrasyon çözümlerinde yardımcı oldular. Bu araçlar, Enterprise Application Integration (EAI) araçları olarak bilinir.

Bu teknolojilerin etrafında çoğunlukla sürükle bırak araçları vardı ve bazı bölümlerde Java'da adaptörler yazmak zorunda kalacaksınız. Bu bağdaştırıcı kodu test edilmemiştir veya test çevresinde zayıf takım / otomasyona sahiptir.

Programlamadaki tasarım desenlerinde olduğu gibi, yaygın entegrasyon çözümleri için Kurumsal Entegrasyon modellerine sahipsiniz. Gregor Hohpe ve Bobby Woolf tarafından aynı adlı bir kitapla ünlü oldular.

Bir veya daha fazla EIP kullanan entegrasyon çözümlerini uygulamak oldukça mümkün olsa da, Camel bunu XML, Java, Groovy veya Scala'dan birini kullanarak kod tabanınızda yapma girişimidir.

Deve, zengin DSL ve yönlendirme mekanizması aracılığıyla kitapta listelenen tüm Kurumsal Entegrasyon Kalıplarını destekler.

Bu yüzden Camel, entegrasyon kodunuzu test etmek için daha iyi destek sağlayan diğer EAI araçlarına rakip bir teknolojidir. Kod, Etki Alanına Özel Diller (DSL'ler) nedeniyle kısa ve öz olur. İş kullanıcıları tarafından bile okunabilir ve ücretsizdir ve üretken olmanızı sağlar.


7

Mesajlaşma ve mesajlaşma sorunlarını çözme konusunda bizi kolaylaştıran birçok çerçeve var. Böyle bir ürün Apache Camel.

Yaygın sorunların çoğunun tasarım deseni olarak adlandırılan kanıtlanmış çözümleri vardır. Mesajlaşma tasarım deseni, burada iyi açıklanmış olan Kurumsal Entegrasyon kalıplarıdır (EIP) . Apache devesi, çözümümüzü EIP'leri kullanarak uygulamamıza yardımcı olur.

Bir entegrasyon çerçevesinin gücü, EIP'ler veya diğer kalıplar, nakliye ve bileşen sayısı ve Apache devesinin listenin en üstünde bulunduğu geliştirme kolaylığı aracılığıyla bizi kolaylaştırma yeteneğidir.

Çerçevelerin her birinin kendine özgü avantajları vardır Apache devesinin özel özelliklerinden bazıları şunlardır.

  1. Kodlamanın, birçok DSL'de, yani popüler olan Java DSL ve Spring xml tabanlı DSL'de olmasını sağlar.
  2. Kolay kullanım ve kullanımı basit.
  3. Sigorta IDE, kullanıcı arayüzü üzerinden kod yazmanıza yardımcı olan bir üründür

7

Düz İngilizce'de deve, kazan plakası kodu olmadan çok fazla şey yapar.

Sadece size bir perspektif vermek için, aşağıda verilen Java DSL, Ürün Listesinden oluşan bir XML'i kabul edebilecek ve birden fazla ürüne ayıracak ve onunla BrandProcessor'un İşlem yöntemini çağırabilecek bir REST uç noktası oluşturacaktır. Ve sadece .parallelProcessing (yorumlanmış kısmı not edin) ekleyerek tüm Ürün Nesnelerini paralel olarak işleyecektir. (Ürün sınıfı, xml girişinin sınırlı olduğu XSD'den JAXB / XJC tarafından üretilen Java saplamasıdır.) Bu kadar kod (birkaç Deve bağımlılığı ile birlikte) 100'lü satır Java kodu almak için kullanılan işi alacaktır.

from("servlet:item-delta?matchOnUriPrefix=true&httpMethodRestrict=POST")
.split(stax(Product.class))
/*.parallelProcessing()*/
.process(itemDeltaProcessor);

Rota kimliğini ve günlük bildirimini ekledikten sonra

from("servlet:item-delta?matchOnUriPrefix=true&httpMethodRestrict=POST")
.routeId("Item-DeltaRESTRoute")
.log(LoggingLevel.INFO, "Item Delta received on Item-DeltaRESTRoute")
.split(stax(Product.class))
.parallelProcessing()
.process(itemDeltaProcessor);

Bu sadece bir örnek, Deve sadece REST bitiş noktasından çok daha fazlası. Takılabilir bileşen listesine bir göz atın http://camel.apache.org/components.html


6

Deve yönlendirme, dönüşüm, izleme konularında yardımcı olur.

Rotaları kullanır; bunlar şu şekilde tanımlanabilir:

Servis veri yolu belirli bir mesaj aldığında, bunu sıra / konu gibi hiçbir hizmet / aracı varış yeri üzerinden yönlendiremez. Bu yol, rota olarak bilinir.

Misal: Stok uygulamanız analist tarafından bir miktar girdi almıştır, uygulama / web bileşeni aracılığıyla işlenecek ve sonuç belirli stok güncellemesi için tüm ilgili / kayıtlı üyelere yayınlanacaktır.


5

Amazon gibi bir e-ticaret şirketi oluşturduğunuzu ve yalnızca satmak için strateji / ürün seçimine odaklanmak istediğinizi varsayın. Amazon teslimat filosunun aksine, malların satıcılardan depoya taşınması yerine, ambalaj gibi depoda değişiklik yapmak ve diğer şehir ve müşterilere göndermek. Tüm bunları yapan bir şirket kiralarsınız ve sadece tüm depo yerleriniz, araç türleri, teslimat yerleri ve ne zaman yapılacağına dair bir liste verirsiniz. Sonra bunu kendi başlarına hallederler, bu Apache Camel olurdu. Bir şeyleri bir uçtan diğerine taşımakla ilgileniyorlar, bir şeyleri onlara aktardıktan sonra, başka şeylere odaklanmakta özgürsünüz.


5

101 Kelime Giriş

Deve, uygulamaları bir araya getirmek için tutarlı bir API ve programlama modeline sahip bir çerçevedir. API, Kurumsal Entegrasyon Kalıplarındaki teorilere dayanır - mesajlaşmayı kullanma eğiliminde olan bir dizi tasarım deseni. Bu modellerin çoğunun kutudan çıktığı uygulamaları sağlar ve ayrıca 200'den fazla farklı bileşenle birlikte gönderilir olarak her türlü diğer sistemle kolayca konuşmak için kullanabileceğiniz . Camel'i kullanmak için, önce iş mantığınızı POJO'lara yazın ve mesajlar etrafında basit arayüzler uygulayın. Ardından, uygulamanızı birbirine yapıştırmak için bir dizi kural olan "Rotalar" oluşturmak için Camel'in DSL'ini kullanın.

Genişletilmiş Giriş

Yüzeyde, Camel'in işlevselliği geleneksel Enterprise Service Bus ürünleriyle rekabet ediyor. Genellikle bir Deve Rotası'nın sunucu tarafında yaşayan bir "arabuluculuk" (orkestrasyon) bileşeni olduğunu düşünüyoruz, ancak bir Java kütüphanesi olduğu için gömülmesi kolaydır ve aynı zamanda bir istemci tarafı uygulamasında da yaşayabilir ve entegre etmenize yardımcı olabilir noktadan noktaya hizmetlerle (koreografi olarak da bilinir). Camel rotasındaki mesajları işleyen POJO'larınızı bile alabilir ve kolayca kendi uzak tüketici süreçlerine dönüştürebilirsiniz, örneğin, sadece bir parçayı bağımsız olarak ölçeklendirmeniz gerekiyorsa. İhtiyaçlarınıza bağlı olarak herhangi bir sayıda farklı uzaktan taşıma / protokol aracılığıyla rotaları veya işlemcileri bağlamak için Camel'i kullanabilirsiniz. Son derece verimli ve hızlı bir ikili protokole ihtiyacınız var mı, ya da daha insan tarafından okunabilen ve hata ayıklaması kolay olan? Değiştirmek isteseydiniz ne olurdu? Deve ile bu genellikle rotanızdaki bir ya da iki satırı değiştirmek ve hiç bir iş mantığını değiştirmemek kadar kolaydır. Veya her ikisini de destekleyebilirsiniz - bir Deve Bağlamında aynı anda birçok Güzergahı çalıştırmakta özgürsünüz.

Tek bir işlemde veya JVM'de yaşayacak basit uygulamalar için Camel'i kullanmanıza gerek yoktur - aşırıya kaçar. Ancak kavramsal olarak kendinizi yazabileceğiniz koddan daha zor değildir. Gereksinimleriniz değişirse, iş mantığı ve tutkal kodunun ayrılması zaman içinde bakımını kolaylaştırır. Deve API'sini öğrendikten sonra, İsviçre Ordusu bıçağı gibi kullanmak ve başka türlü yazmak zorunda kalacak özel kod miktarını azaltmak için birçok farklı bağlamda hızlıca uygulamak kolaydır. Bir lezzeti öğrenebilirsiniz - Java DSL, örneğin zincirlemesi kolay akıcı bir API - ve diğer lezzetleri kolayca alabilirsiniz.

Mikro hizmet yapmaya çalışıyorsanız, genel deve mükemmel bir seçimdir. Bunu evrim mimarisi için paha biçilmez buldum, çünkü problem alanınız hakkında daha fazla bilgi sahibi oluncaya kadar protokoller, taşıma ve diğer sistem entegrasyon problemleri hakkında birçok zor, "kolay anlaşılır" karar verebilirsiniz. EIP'lerinize ve temel iş mantığınıza odaklanın ve daha fazla bilgi edindikçe "doğru" bileşenlerle yeni Rotalara geçin.


4

Evet, bu muhtemelen biraz geç. Ancak herkesin yorumlarına ekleyecek bir şey var ki, Camel aslında tam bir özellik kümesi yerine bir araç kutusu. Bunu geliştirirken aklınızda bulundurmalısınız ve çeşitli dönüşümler ve protokol dönüşümleri yapmanız gerekir.

Devenin kendisi diğer çerçevelere dayanır ve bu nedenle bazen hangilerinin ihtiyaçlarınıza en uygun olduğunu anlamak için bunları da anlamanız gerekir. Örneğin REST ile başa çıkmanın birden fazla yolu vardır. Bu ilk başta biraz kafa karıştırıcı olabilir, ancak kullanmaya ve test etmeye başladıktan sonra kendinizi rahat hissedeceksiniz ve farklı kavramlar hakkındaki bilginiz artacaktır.


4

Apache Camel, Kurumsal entegrasyon için bir Java çerçevesidir. Örneğin: - birçok satıcı API'siyle etkileşime giren bir web uygulaması oluşturuyorsanız, deveyi Harici entegrasyon aracı olarak kullanabiliriz. Kullanım durumuna göre daha fazlasını yapabiliriz. Manning yayınlarından Deve Eylemde Deve öğrenmek için harika bir kitap. Entegrasyonlar aşağıdaki gibi tanımlanabilir.

Java DSL

from("jetty://0.0.0.0:8080/searchProduct").routeId("searchProduct.products").threads()
    .log(LoggingLevel.INFO, "searchProducts request Received with body: ${body}")
    .bean(Processor.class, "createSearchProductsRequest").removeHeaders("CamelHttp*")
    .setHeader(Exchange.HTTP_METHOD, constant(org.apache.camel.component.http4.HttpMethods.POST))
    .to("http4://" + preLiveBaseAPI + searchProductsUrl + "?apiKey=" + ApiKey
                    + "&bridgeEndpoint=true")
    .bean(Processor.class, "buildResponse").log(LoggingLevel.INFO, "Search products finished");

Bunun amacı, harici bir API'yi çağıran ve isteği geri gönderen bir REST API uç noktası oluşturmaktır

İlkbahar DSL

<route id="GROUPS-SHOW">
    <from uri="jetty://0.0.0.0:8080/showGroups" />
    <log loggingLevel="INFO" message="Reqeust receviced service to fetch groups -> ${body}" />
    <to uri="direct:auditLog" />
    <process ref="TestProcessor" />
</route>

Sorularınıza geliyor

  1. Tam olarak nedir? Cvp: - Kurumsal entegrasyon modellerini uygulayan bir çerçevedir
  2. Java ile yazılmış bir uygulama ile nasıl etkileşimde bulunur? Ans: - http, ftp, amqp vb.Gibi mevcut protokollerle etkileşime girebilir
  3. Sunucu ile birlikte giden bir şey mi? Cvp: - Tomcat gibi bir kaba yerleştirilebilir veya bir java işlemi olarak bağımsız olarak konuşlandırılabilir
  4. Bağımsız bir program mı? Ans: - Olabilir.

Umarım yardımcı olur


3

Apache Camel, tüm Kurumsal Entegrasyon modellerini uygulayan hafif bir entegrasyon çerçevesidir. İstenen desenleri kullanarak farklı uygulamaları kolayca entegre edebilirsiniz. Java, Spring XML, Scala veya Groovy kullanabilirsiniz.

Apache Camel, Java Sanal Makinesi'nde (JVM) çalışır. ... Apache Camel'in ana işlevi yönlendirme motorudur. İlgili rotalara göre mesajlar tahsis eder. Bir rota akış ve entegrasyon mantığı içerir. EIP'ler ve belirli bir DSL kullanılarak uygulanır.

resim açıklamasını buraya girin


1
Deve, EIP'de 40 modeli uygular: kurumsal entegrasyon modeli.
Jacob

2

Bu bir boru hattı gibi

From---->To

Aralarında u kadar kanal ve boru ekleyebilirsiniz. Musluk, veri akışı için herhangi bir otomatik veya manuel tipte ve akışı kanalize etmek için bir yol olabilir.

Her türlü işleme türünü destekler ve uygular. Ve aynı işleme için birçok yaklaşıma sahip olduğu için birçok yaklaşım ve her bir bileşen, altında farklı yöntemler kullanarak istenen çıktıyı da sağlayabilir.

Örneğin, dosya aktarımı deve içinde dosya taşınmış veya kopyalanmış tiplerle ve ayrıca klasör, sunucu veya kuyruktan yapılabilir.

-from-->To
   - from-->process-->to
   - from-->bean-->to
   - from-->process-->bean-->to
   -from-->marshal-->process-->unmarshal-->to

/ Den ---- klasör, doğrudan, seda, vm herhangi bir şey olabilir


0

Başka bir bakış açısı (daha temel matematik konularına dayanarak)

En genel bilgi işlem platformu bir [ https://en.wikipedia.org/wiki/Turing_machine]

Turing makinesinde bir sorun var. Tüm giriş / çıkış verileri turing makinesinin içinde kalır. Gerçek dünyada Turing makinemizin dışında ve genel olarak kontrolümüz dışındaki sistemler tarafından yönetilen giriş kaynakları ve çıkış lavaboları vardır. Yani, bu harici sistem, istenen herhangi bir veri zamanlayıcı ile herhangi bir formatta istediği zaman veri gönderir / alır.

Soru: Bağımsız turing makinelerinin birbirleriyle en genel şekilde konuşmasını nasıl sağlarız, böylece her turing makinesi akranlarını bir giriş verisi kaynağı veya çıkış verilerinin kaynağı olarak görür?

Yanıt: Deve, katır, BizTalk veya farklı "fiziksel" (veya sanal yazılım) turlama makinelerini tamamlamak arasındaki veri işlemeyi soyutlayan herhangi bir ESB gibi bir şey kullanmak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.