JMS ve AMQP - RabbitMQ


134

JMS'nin ne olduğunu ve AMQP terminolojisine nasıl bağlı olduğunu anlamaya çalışıyorum. JMS'nin bir API ve AMQP'nin bir protokol olduğunu biliyorum.

İşte varsayımlarım (ve aynı zamanda sorularım)

  • RabbitMQ, AMQP protokolünü kullanır (daha çok AMQP protokolünü uygular)
  • Java istemcilerinin RabbitMQ'ya bağlanmak / kullanmak için AMQP protokolü istemci kitaplıklarını kullanması gerekir
  • JMS API burada nerede devreye giriyor? JMS API, RabbitMQ'ya bağlanmak için AMQP istemci kitaplıklarını kullanmalıdır?
  • Genellikle RabbitMQ, ActiveMQ, vb. Gibi Mesaj simsarlarını bağlamak için JMS kullanırız. O halde burada AMQP yerine kullanılan varsayılan protokol nedir?

Yukarıdakilerden bazıları aptalca olabilir. :-) Ama kafamı etrafına dolamaya çalışıyorum.


3
@KevinRave: Seçilen cevap, yaptığı bazı ana noktalarda yanlış. Bakabilmeniz için bir yorum ekledim.
2020

@KevinRave Cevabı düzenledim.Şimdi Tartışmalı kısım değiştirildi.Şimdi tüm cevap mükemmel bir şekilde tamam
Freak

Cevabımı kimin düzenlediğini ve 3 numaradaki bu uygunsuz noktayı kimin verdiğini bilmiyorum .. çünkü Kevin'in 2. noktada söylediği şeyi zaten sordum. Aşağı oylamadan veya önerilerde bulunmadan önce her zaman dikkatlice okuyun
Freak

1
Bu makaledeki JMS bölümüne bir göz atın. Çok detaylı bir açıklaması var saipraveenblog.wordpress.com/2014/12/08/…
java_geek

Yanıtlar:


118

Sorunuz biraz dağınık ve bir soru kağıdındaki zor bir soruyu andırıyor :) (Öğretmenler her zaman karmaşık hale getiren basit sorular sormaya çalıştıkları için: DI umarım öğretmen değilsiniz :)) Bunların hepsini tek tek görelim.

Bildiğin gibi:

Java Mesaj Hizmeti (JMS) API, iki veya daha fazla istemci arasında mesaj göndermek için bir Java Mesaj Odaklı Ara Yazılım (MOM) API'sidir . JMS, Java Platform, Enterprise Edition'ın bir parçasıdır ve Java Community Process altında JSR 914 olarak geliştirilen bir belirtimle tanımlanır . Java Enterprise Edition (Java EE) tabanlı uygulama bileşenlerinin oluşturulmasına izin veren bir mesajlaşma standardıdır, mesaj gönderme, alma ve okuma. Dağıtılmış bir uygulamanın farklı bileşenleri arasındaki iletişimin gevşek bir şekilde bağlı, güvenilir ve asenkron olmasına izin verir .

Şimdi ( Wikipedia'dan ):

Advanced Message Queuing Protocol (AMQP) , mesaj odaklı ara yazılımlar için açık standart bir uygulama katmanı protokolüdür. AMQP'nin tanımlayıcı özellikleri mesaj yönlendirme, kuyruğa alma, yönlendirme (noktadan noktaya ve yayınla ve abone ol dahil), güvenilirlik ve güvenliktir.

Ve en önemli şey (yine Wikipedia'dan):

Yalnızca bir API'yi tanımlayan JMS'nin aksine, AMQP kablo düzeyinde bir protokoldür. Kablo düzeyinde bir protokol, ağ üzerinden bir sekizli akışı olarak gönderilen verilerin biçiminin bir açıklamasıdır. Sonuç olarak, bu veri formatına uyan mesajlar oluşturabilen ve yorumlayabilen herhangi bir araç, uygulama dilinden bağımsız olarak herhangi bir uyumlu araçla birlikte çalışabilir.

Bilmeniz gereken bazı önemli şeyler:

  1. AMQP'nin, JMS API'yi uygulamayan bir mesajlaşma teknolojisi olduğunu unutmayın.
  2. JMS API'dir ve AMQP bir protokoldür. Bu nedenle, JMS'nin varsayılan protokolünün ne olduğunu söylemek mantıklı değildir, tabii ki istemci uygulamaları bir WebLogic Web Hizmeti'ni çağırırken bağlantı protokolü olarak HTTP / S kullanır.
  3. JMS yalnızca bir API spesifikasyonudur. Herhangi bir protokol kullanmaz. Bir JMS sağlayıcısı (ActiveMQ gibi), JMS API'yi gerçekleştirmek için herhangi bir temel protokolü kullanıyor olabilir. Örneğin: Apache ActiveMQ şu protokollerden herhangi birini kullanabilir: AMQP, MQTT, OpenWire, REST (HTTP), RSS ve Atom, Stomp, WSIF, WS Notification, XMPP. Bağlantı Protokolü olarak JMS Aktarımı'nı okumanızı öneririm .

İyi şanslar :)


20
I am not sure but I believe that AMQP also uses HTTP/S protocol but AMQP is enhacement is messaging protocol over HTTP: Hayır. Bu doğru değil. JMS uses simple HTTP but for RabbitMQ/ActiveMq, they uses enhanced protocol.: Hayır. Bu doğru değil. JMS yalnızca bir API spesifikasyonudur. Herhangi bir protokol kullanmaz. Bir JMS sağlayıcısı (ActiveMQ gibi), JMS API'yi gerçekleştirmek için herhangi bir temel protokolü kullanıyor olabilir. Örneğin: Apache ActiveMQ şu protokollerden herhangi birini kullanabilir: AMQP, MQTT, OpenWire, REST (HTTP), RSS ve Atom, Stomp, WSIF, WS Bildirimi, XMPP.
2020

Cevabı düzenledim.Şimdi Tartışmalı kısım yerini aldı.
Ucube

1
@brainOverflow Cevabımı kimin düzenlediğini ve 3. numaradaki bu uygunsuz noktayı kimin verdiğini bilmiyorum .. çünkü 2. noktada söylediğiniz şeyi sordum. Oylamadan veya önerilerde bulunmadan önce her zaman dikkatlice okuyun
Freak

o PDF'den bir şeyler ekledim, böylece başka bağlantılara da gidebilirsiniz
Freak

44

Temelden başlayalım.

RabbitMQ , Erlang (TLC odaklı bir programlama dili) ile geliştirilmiş ve AMQP (Gelişmiş Mesaj Kuyruklama Protokolü) kablolu protokolü uygulayan bir MOM'dur (Mesaj Odaklı Ara Yazılım ). Şu anda, birçok İstemci API'si (örneğin, Java, C ++, RESTful, vb.) RabbitMQ mesajlaşma servislerinin kullanımını etkinleştirmek için mevcuttur.

JMS (Java Messaging Service), bir MOM tarafından uygulanacak bir dizi yapılandırılmış API'yi tanımlayan bir JCP standardıdır . JMS API'lerini uygulayan (yani uyumlu olan) bir MOM örneği ActiveMQ'dur; HornetMQ ve diğerleri de var. Bu tür ara yazılımlar JMS API'lerini alır ve değişim modellerini buna göre uygular.

Yukarıdakilere göre, bir RabbitMQ ve onun Java İstemci API'lerinin bir örneği olan JMS API'lerinin iskeleti ele alındığında, RabbitMQ'dan faydalanarak bir JMS uygulaması geliştirmek mümkündür: bu noktada yapılması gereken tek şey, JMS spesifikasyonuna göre değişim modeli (RabbitMQ üzerinden).

Anahtar şudur: JMS gibi bir dizi API, teknolojiden bağımsız olarak uygulanabilir (bu durumda, RabbitMQ).


TLC ne anlama geliyor?
mvmn

@mvmm TLC, Telekomünikasyon anlamına gelir. Lütfen [1] 'e bir göz atın. [1] allacronyms.com/TLC/Telecommunication
Paolo Maresca

15

JMS, tanımlandığında JMS istemcisi ile mesajlaşma sunucusu arasında bir protokol tanımlamadı. JMS API'yi uygulayan JMS istemcisi, mesajlaşma sunucusuyla iletişim kurmak için her türlü protokolü kullanabilir. İstemcinin sadece JMS api ile uyumlu olması gerekir. Bu kadar. Genellikle JMS istemcileri, mesajlaşma sunucusunun anladığı özel bir protokol kullanır.

AMQP ise bir mesajlaşma istemcisi ile mesajlaşma sunucusu arasındaki bir protokoldür. Bir JMS istemcisi, mesajlaşma sunucusuyla iletişim kurmak için protokol olarak AMQP'yi kullanabilir. Ve bunun gibi müşteriler var.

http://www.lshift.net/blog/2009/03/16/openamqs-jms-client-with-rabbitmq-server


2
  • JMS API burada nerede devreye giriyor? JMS API, RabbitMQ'ya bağlanmak için AMQP istemci kitaplıklarını kullanmalıdır?

JMS bir API'dir, bu nedenle bazı JMS API'leri AMQP protokolü ( Apache QPID JMS gibi) üzerinden uygulanırken çoğu JMS API'si diğer protokolleri kullanır. AMQP protokolünün sürümü aynıysa, böyle bir istemci başka bir AMQP istemcisi ile iletişim kurabilmelidir.

  • Genellikle RabbitMQ, ActiveMQ, vb. Gibi Mesaj simsarlarını bağlamak için JMS kullanırız. O halde burada AMQP yerine kullanılan varsayılan protokol nedir?

JMS API yapılandırmanıza bağlıdır. ActiveMQ için AMQP olabilir ancak varsayılan olarak "openwire" dır



0

https://spring.io/understanding/AMQP

AMQP (Gelişmiş Mesaj Kuyruklama Protokolü), eşzamansız mesajlaşma için açık olarak yayınlanan bir kablo spesifikasyonudur. İletilen verilerin her baytı belirtilir. Bu özellik, kitaplıkların birçok dilde yazılmasına ve birden çok işletim sistemi ve CPU mimarisinde çalışmasına izin verir, bu da gerçekten birlikte çalışabilir, platformlar arası bir mesajlaşma standardı oluşturur.

AMQP genellikle Java topluluğundaki en yaygın mesajlaşma sistemi olan JMS (Java Message Service) ile karşılaştırılır. JMS'nin bir sınırlaması, API'lerin belirtilmiş olması, ancak mesaj biçiminin belirtilmemesidir. AMQP'den farklı olarak, JMS'nin mesajların nasıl oluşturulduğu ve iletildiği konusunda bir gereksinimi yoktur. Esasen, her JMS aracısı mesajları farklı bir biçimde uygulayabilir. Sadece aynı API'yi kullanmaları gerekir.


-1

Kısmen şunu yazan bu dokümantasyonu arıyor olabileceğinizden şüpheleniyorum :

VFabric RabbitMQ için JMS İstemcisi, vFabric RabbitMQ için bir istemci kitaplığıdır. vFabric RabbitMQ bir JMS sağlayıcısı değildir, ancak JMS Queue ve Topic mesajlaşma modellerini desteklemek için gerekli özelliklere sahiptir. RabbitMQ için JMS İstemcisi, JMS 1.1 spesifikasyonunu RabbitMQ Java istemci API'sinin üzerine uygular, böylece yeni ve mevcut JMS uygulamalarının, Gelişmiş Mesaj Kuyruklama Protokolü (AMQP) aracılığıyla RabbitMQ aracılarıyla bağlantı kurmasına izin verir.


Hayır! Baktığım o değil. Ama benzer.
Kevin Rave
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.