JMS dan AMQP - RabbitMQ

133

Saya mencoba memahami apa itu JMS dan bagaimana terhubung ke terminologi AMQP. Saya tahu JMS adalah API dan AMQP adalah protokol.

Inilah asumsi saya (dan pertanyaan juga)

  • RabbitMQ menggunakan protokol AMQP (lebih tepatnya mengimplementasikan protokol AMQP)
  • Klien Java perlu menggunakan perpustakaan klien protokol AMQP untuk menghubungkan / menggunakan RabbitMQ
  • Di mana JMS API berperan di sini? JMS API harus menggunakan pustaka klien AMQP untuk terhubung ke RabbitMQ?
  • Biasanya kita menggunakan JMS untuk menghubungkan broker pesan seperti RabbitMQ, ActiveMQ, dll. Lalu apa protokol default yang digunakan di sini daripada AMQP?

Beberapa hal di atas mungkin bodoh. :-) Tetapi mencoba membungkus kepala saya di sekitarnya.

Kevin Rave
sumber
3
@KevinRave: Jawaban yang dipilih salah pada beberapa poin utama yang dibuatnya. Saya telah menambahkan komentar sehingga Anda dapat melihatnya.
2020
@KevinRave Saya telah mengedit jawabannya. Sekarang bagian yang kontroversial telah diganti. Sekarang seluruh jawaban baik-baik saja
Freak
Saya tidak tahu siapa yang mengedit jawaban saya dan memberikan poin yang tidak tepat ini yaitu pada angka 3 .. karena saya sudah menanyakan hal yang dikatakan kevin pada poin 2. Selalu membaca dengan cermat sebelum memilih atau memberikan saran
Freak
1
Lihat bagian JMS di artikel ini. Ini memiliki penjelasan yang sangat terperinci saipraveenblog.wordpress.com/2014/12/08/…
java_geek

Jawaban:

118

Pertanyaan Anda agak berantakan dan menyerupai pertanyaan sulit di kertas pertanyaan :) (Karena guru selalu mencoba untuk mengajukan pertanyaan sederhana yang kompleks: DI harap Anda bukan seorang guru :)) Mari kita lihat semua ini satu per satu.

Seperti yang Anda ketahui:

API Java Message Service (JMS) adalah API Middleware (MOM) yang Berorientasi pada Pesan Java untuk mengirim pesan antara dua atau lebih klien . JMS adalah bagian dari Java Platform, Enterprise Edition, dan didefinisikan oleh spesifikasi yang dikembangkan di bawah Java Community Process sebagai JSR 914. Ini adalah standar pengiriman pesan yang memungkinkan komponen aplikasi berdasarkan Java Enterprise Edition (Java EE) untuk membuat, kirim, terima, dan baca pesan. Ini memungkinkan komunikasi antara berbagai komponen aplikasi terdistribusi secara longgar digabungkan, dapat diandalkan, dan tidak sinkron .

Sekarang (dari Wikipedia ):

Advanced Message Queuing Protocol (AMQP) adalah protokol lapisan aplikasi standar terbuka untuk middleware berorientasi pesan. Fitur yang menentukan AMQP adalah orientasi pesan, antrian, perutean (termasuk point-to-point dan publish-and-subscribe), keandalan dan keamanan.

Dan yang paling penting (lagi dari Wikipedia):

Tidak seperti JMS, yang hanya mendefinisikan API, AMQP adalah protokol tingkat kawat. Protokol tingkat kawat adalah deskripsi format data yang dikirim melalui jaringan sebagai aliran oktet. Konsekuensinya, alat apa pun yang dapat membuat dan menafsirkan pesan yang sesuai dengan format data ini dapat berinteroperasi dengan alat lain yang sesuai terlepas dari bahasa implementasi

Beberapa hal penting yang harus Anda ketahui:

  1. Perlu diingat bahwa AMQP adalah teknologi pengiriman pesan yang tidak mengimplementasikan API JMS.
  2. JMS adalah API dan AMQP adalah sebuah protokol. Jadi tidak masuk akal untuk mengatakan bahwa apa itu protokol standar JMS, tentu saja aplikasi klien menggunakan HTTP / S sebagai protokol koneksi ketika menggunakan Layanan Web WebLogic.
  3. JMS hanya spesifikasi API. Itu tidak menggunakan protokol apa pun. Penyedia JMS (seperti ActiveMQ) dapat menggunakan protokol yang mendasari untuk mewujudkan JMS API. Sebagai contoh: Apache ActiveMQ dapat menggunakan protokol berikut: AMQP, MQTT, OpenWire, REST (HTTP), RSS dan Atom, Stomp, WSIF, WS Notification, XMPP. Saya sarankan Anda membaca Menggunakan JMS Transport sebagai Protokol Koneksi .

Semoga berhasil :)

Aneh
sumber
20
I am not sure but I believe that AMQP also uses HTTP/S protocol but AMQP is enhacement is messaging protocol over HTTP: Tidak. Itu tidak benar. JMS uses simple HTTP but for RabbitMQ/ActiveMq, they uses enhanced protocol.: Tidak. Itu tidak benar. JMS hanya spesifikasi API. Itu tidak menggunakan protokol apa pun. Penyedia JMS (seperti ActiveMQ) dapat menggunakan protokol yang mendasari untuk mewujudkan JMS API. Sebagai contoh: Apache ActiveMQ dapat menggunakan protokol berikut: AMQP, MQTT, OpenWire, REST (HTTP), RSS dan Atom, Stomp, WSIF, WS Notification, XMPP.
2020
Saya telah mengedit jawabannya. Sekarang bagian yang kontroversial telah diganti.
Freak
1
@brainOverflow Saya tidak tahu siapa yang mengedit jawaban saya dan memberikan poin yang tidak tepat ini yaitu pada angka 3 .. karena saya telah menanyakan hal yang Anda katakan pada poin 2. Selalu membaca dengan cermat sebelum memilih atau memberikan saran
Freak
saya sudah menambahkan hal-hal dari PDF itu sehingga Anda dapat pergi ke beberapa tautan lain juga
Freak
43

Mari kita mulai dari basis.

RabbitMQ adalah MOM (Message Oriented Middleware), dikembangkan dengan Erlang (bahasa pemrograman berorientasi TLC) dan mengimplementasikan protokol kawat AMQP (Advance Message Queuing Protocol). Saat ini, banyak API Klien (mis. Java, C ++, RESTful, dll.) Tersedia untuk memungkinkan penggunaan layanan pengiriman pesan RabbitMQ.

JMS (Java Messaging Service) adalah standar JCP yang mendefinisikan seperangkat API terstruktur untuk diimplementasikan oleh seorang MOM. Contoh MOM yang mengimplementasikan (yaitu kompatibel dengan) JMS API adalah ActiveMQ; ada juga HornetMQ, dan lainnya. Perangkat middlare semacam itu mendapatkan API JMS dan menerapkan pola pertukaran yang sesuai.

Menurut di atas, dengan mengambil kerangka JMS API, sebuah instance dari RabbitMQ dan Java Client APIsnya, adalah mungkin untuk mengembangkan implementasi JMS menggunakan RabbitMQ: satu-satunya hal yang harus dilakukan seseorang, pada saat itu, adalah menerapkan pola pertukaran (lebih dari RabbitMQ) sesuai dengan spesifikasi JMS.

Kuncinya adalah: satu set API, seperti JMS, dapat diimplementasikan terlepas dari teknologi (dalam hal ini, RabbitMQ).

Paolo Maresca
sumber
TLC berdiri untuk apa?
mvmn
@mvmm TLC singkatan dari Telekomunikasi. Silakan, lihat [1]. [1] allacronyms.com/TLC/Telekomunikasi
Paolo Maresca
15

JMS, ketika didefinisikan tidak mendefinisikan protokol antara klien JMS dan server pengiriman pesan. Klien JMS, yang mengimplementasikan API JMS dapat menggunakan protokol apa pun untuk berkomunikasi dengan server pengiriman pesan. Klien hanya perlu mematuhi JMS api. Itu saja. Biasanya klien JMS menggunakan protokol khusus yang dimengerti oleh server pesan mereka.

AMQP di sisi lain adalah protokol antara klien pengiriman pesan dan server pengiriman pesan. Klien JMS dapat menggunakan AMQP sebagai protokol untuk berkomunikasi dengan server pengiriman pesan. Dan ada klien seperti itu tersedia.

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

chakakasa
sumber
2
  • Di mana JMS API berperan di sini? JMS API harus menggunakan pustaka klien AMQP untuk terhubung ke RabbitMQ?

JMS adalah API, sehingga beberapa API JMS diimplementasikan melalui protokol AMQP (seperti Apache QPID JMS ) sementara sebagian besar API JMS menggunakan protokol lain. Jika versi protokol AMQP adalah sama, klien tersebut harus dapat berkomunikasi dengan klien AMQP lainnya.

  • Biasanya kita menggunakan JMS untuk menghubungkan broker pesan seperti RabbitMQ, ActiveMQ, dll. Lalu apa protokol default yang digunakan di sini daripada AMQP?

Itu tergantung pada konfigurasi JMS API Anda. Untuk ActiveMQ, bisa saja AMQP tetapi secara default adalah 'openwire'

Axel Podehl
sumber
1

Saya ingin menyarankan sebuah makalah, banyak membantu saya untuk memahami lebih baik apa perbedaan antara AMQP dan JMS.

Berikut tautan ke makalah: http://www.wmrichards.com/amqp.pdf

aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
sumber
0

https://spring.io/understanding/AMQP

AMQP (Advanced Message Queuing Protocol) adalah spesifikasi kawat yang dipublikasikan untuk pesan asinkron. Setiap byte data yang dikirimkan ditentukan. Karakteristik ini memungkinkan pustaka ditulis dalam banyak bahasa, dan dijalankan pada banyak sistem operasi dan arsitektur CPU, yang membuat standar perpesanan lintas platform yang benar-benar dapat dioperasikan.

AMQP sering dibandingkan dengan JMS (Java Message Service), sistem pesan yang paling umum di komunitas Java. Batasan JMS adalah bahwa API ditentukan, tetapi format pesannya tidak. Tidak seperti AMQP, JMS tidak memiliki persyaratan untuk bagaimana pesan dibentuk dan dikirim. Pada dasarnya, setiap broker JMS dapat mengimplementasikan pesan dalam format yang berbeda. Mereka hanya harus menggunakan API yang sama.

gstackoverflow
sumber
-1

Saya menduga Anda mungkin mencari dokumentasi ini yang mengatakan, sebagian:

Klien JMS untuk vFabric RabbitMQ adalah perpustakaan klien untuk vFabric RabbitMQ. vFabric RabbitMQ bukan penyedia JMS tetapi memiliki fitur yang diperlukan untuk mendukung model pesan Antrian dan Topik JMS. Klien JMS untuk RabbitMQ mengimplementasikan spesifikasi JMS 1.1 di atas API klien RabbitMQ Java, sehingga memungkinkan aplikasi JMS yang baru dan yang ada untuk terhubung dengan broker RabbitMQ melalui Advanced Message Queuing Protocol (AMQP).

Bahaya
sumber
Nggak. Bukan yang saya lihat. Namun serupa.
Kevin Rave