JMS และ AMQP - RabbitMQ


134

ฉันพยายามทำความเข้าใจว่า JMS อะไรและเชื่อมต่อกับคำศัพท์ AMQP อย่างไร ฉันรู้ว่า JMS เป็น API และ AMQP เป็นโปรโตคอล

นี่คือสมมติฐานของฉัน (และคำถามเช่นกัน)

  • RabbitMQ ใช้โปรโตคอล AMQP (ค่อนข้างใช้โปรโตคอล AMQP)
  • ไคลเอนต์ Java จำเป็นต้องใช้ไลบรารีไคลเอ็นต์โปรโตคอล AMQP เพื่อเชื่อมต่อ / ใช้ RabbitMQ
  • JMS API เข้ามามีบทบาทอย่างไรที่นี่? JMS API ควรใช้ไลบรารีไคลเอนต์ AMQP เพื่อเชื่อมต่อกับ RabbitMQ หรือไม่
  • โดยปกติเราใช้ JMS เพื่อเชื่อมต่อโบรกเกอร์ Message เช่น RabbitMQ, ActiveMQ เป็นต้นแล้วโปรโตคอลเริ่มต้นที่ใช้ที่นี่แทน AMQP คืออะไร?

บางส่วนข้างต้นอาจเป็นใบ้ :-) แต่พยายามห่อหัวไว้


3
@KevinRave: คำตอบที่เลือกไม่ถูกต้องในประเด็นหลักบางประการ ฉันได้เพิ่มความคิดเห็นเพื่อให้คุณสามารถดูได้
2020

@KevinRave ฉันได้แก้ไขคำตอบแล้วตอนนี้ส่วนที่ขัดแย้งได้เข้ามาแทนที่ตอนนี้คำตอบทั้งหมดก็โอเคอย่างสมบูรณ์
Freak

ฉันไม่รู้ว่าใครแก้ไขคำตอบของฉันและให้คะแนนที่ไม่เหมาะสมซึ่งอยู่ที่เลข 3 .. เพราะฉันได้ถามสิ่งที่เควินพูด ณ จุดที่ 2 แล้วควรอ่านอย่างรอบคอบก่อนลงคะแนนหรือเสนอแนะ
Freak

1
ดูส่วน JMS ในบทความนี้ มันมีคำอธิบายละเอียดมากsaipraveenblog.wordpress.com/2014/12/08/…
java_geek

คำตอบ:


118

คำถามของคุณค่อนข้างยุ่งและคล้ายกับคำถามที่ยากในกระดาษคำถาม :) (เนื่องจากครูมักจะพยายามถามคำถามง่ายๆที่ซับซ้อน: DI หวังว่าคุณจะไม่ใช่ครู :)) มาดูทั้งหมดนี้ทีละคำถาม

ดังที่คุณทราบ:

Java Message Service (JMS) API เป็น Java Message Oriented Middleware (MOM) API สำหรับการส่งข้อความระหว่างไคลเอ็นต์ตั้งแต่สองเครื่องขึ้นไป JMS เป็นส่วนหนึ่งของ Java Platform, Enterprise Edition และกำหนดโดยข้อกำหนดที่พัฒนาขึ้นภายใต้ Java Community Process เป็น JSR 914 เป็นมาตรฐานการส่งข้อความที่อนุญาตให้ส่วนประกอบของแอปพลิเคชันที่ใช้ Java Enterprise Edition (Java EE) สามารถสร้างได้ ส่งรับและอ่านข้อความ จะช่วยให้การสื่อสารระหว่างส่วนประกอบต่างๆของโปรแกรมการกระจายที่จะคู่อย่างอิสระและเชื่อถือได้และไม่ตรงกัน

ตอนนี้ (จากWikipedia ):

Advanced Message Queuing Protocol (AMQP)เป็นโปรโตคอลชั้นแอปพลิเคชันมาตรฐานแบบเปิดสำหรับมิดเดิลแวร์ที่เน้นข้อความ คุณสมบัติที่กำหนดของ AMQP ได้แก่ การวางแนวข้อความการจัดคิวการกำหนดเส้นทาง (รวมถึงจุดต่อจุดและการเผยแพร่และสมัครสมาชิก) ความน่าเชื่อถือและความปลอดภัย

และสิ่งที่สำคัญที่สุด (อีกครั้งจาก Wikipedia):

แตกต่างจาก JMS ซึ่งเป็นเพียงการกำหนด API AMQP เป็นโปรโตคอลระดับสาย โปรโตคอลระดับสายคือคำอธิบายรูปแบบของข้อมูลที่ส่งผ่านเครือข่ายในรูปแบบของอ็อกเต็ต ดังนั้นเครื่องมือใด ๆ ที่สามารถสร้างและตีความข้อความที่สอดคล้องกับรูปแบบข้อมูลนี้สามารถทำงานร่วมกับเครื่องมืออื่น ๆ ที่สอดคล้องกันได้โดยไม่คำนึงถึงภาษาการนำไปใช้งาน

สิ่งสำคัญบางประการที่คุณควรรู้:

  1. โปรดทราบว่า AMQP เป็นเทคโนโลยีการส่งข้อความที่ไม่ได้ใช้ JMS API
  2. JMS คือ API และ AMQP เป็นโปรโตคอลดังนั้นจึงไม่สมเหตุสมผลที่จะบอกว่าโปรโตคอลเริ่มต้นของ JMS คืออะไรแน่นอนว่าแอปพลิเคชันไคลเอ็นต์ใช้ HTTP / S เป็นโปรโตคอลการเชื่อมต่อเมื่อเรียกใช้ WebLogic Web Service
  3. JMS เป็นเพียงข้อมูลจำเพาะของ API ไม่ใช้โปรโตคอลใด ๆ ผู้ให้บริการ JMS (เช่น ActiveMQ) สามารถใช้โปรโตคอลพื้นฐานใด ๆ เพื่อรับ JMS API ตัวอย่างเช่น: Apache ActiveMQ สามารถใช้โปรโตคอลต่อไปนี้: AMQP, MQTT, OpenWire, REST (HTTP), RSS และ Atom, Stomp, WSIF, WS Notification, XMPP ผมขอแนะนำให้คุณอ่านใช้ JMS ขนส่งเป็นการเชื่อมต่อพิธีสาร

โชคดี :)


20
I am not sure but I believe that AMQP also uses HTTP/S protocol but AMQP is enhacement is messaging protocol over HTTP: ไม่ถูกต้อง JMS uses simple HTTP but for RabbitMQ/ActiveMq, they uses enhanced protocol.: ไม่ถูกต้อง JMS เป็นเพียงข้อมูลจำเพาะของ API ไม่ใช้โปรโตคอลใด ๆ ผู้ให้บริการ JMS (เช่น ActiveMQ) สามารถใช้โปรโตคอลพื้นฐานใด ๆ เพื่อรับ JMS API ตัวอย่างเช่น: Apache ActiveMQ สามารถใช้โปรโตคอลต่อไปนี้: AMQP, MQTT, OpenWire, REST (HTTP), RSS และ Atom, Stomp, WSIF, WS Notification, XMPP
2020

ฉันแก้ไขคำตอบแล้วตอนนี้ส่วนที่ขัดแย้งได้เข้ามาแทนที่
Freak

1
@brainOverflow ฉันไม่รู้ว่าใครแก้ไขคำตอบของฉันและให้ประเด็นที่ไม่เหมาะสมนี้ซึ่งอยู่ที่เลข 3 .. เพราะฉันได้ถามสิ่งที่คุณกำลังพูดในจุดที่ 2 ควรอ่านอย่างรอบคอบก่อนลงคะแนนหรือให้คำแนะนำ
Freak

ฉันได้เพิ่มสิ่งต่างๆจาก PDF นั้นแล้วดังนั้นคุณจึงสามารถไปที่ลิงก์อื่น ๆ ได้เช่นกัน
Freak

44

เริ่มจากพื้นฐานกันก่อน

RabbitMQ คือ MOM (Message Oriented Middleware) ที่พัฒนาด้วย Erlang (ภาษาโปรแกรมที่เน้น TLC) และใช้โปรโตคอล Wire AMQP (Advance Message Queuing Protocol) ปัจจุบัน Client API จำนวนมาก (เช่น Java, C ++, RESTful และอื่น ๆ ) พร้อมใช้งานเพื่อให้สามารถใช้บริการส่งข้อความ RabbitMQ ได้

JMS (Java Messaging Service) เป็นมาตรฐาน JCP ที่กำหนดชุดของ API ที่มีโครงสร้างที่จะนำไปใช้โดย MOM ตัวอย่างของ MOM ที่ใช้ (เช่นเข้ากันได้กับ) JMS API คือ ActiveMQ นอกจากนี้ยังมี HornetMQ และอื่น ๆ ตัวกลางดังกล่าวได้รับ JMS API และใช้รูปแบบการแลกเปลี่ยนตามนั้น

ตามที่กล่าวไว้ข้างต้นนำโครงร่างของ JMS APIs เช่น RabbitMQ และ Java Client APIs มันเป็นไปได้ที่จะพัฒนาการใช้งาน JMS โดยใช้ RabbitMQ: สิ่งเดียวที่ต้องทำ ณ จุดนั้นคือการใช้งาน รูปแบบการแลกเปลี่ยน (มากกว่า RabbitMQ) ตามข้อกำหนด JMS

กุญแจสำคัญคือ: ชุดของ API เช่น JMS สามารถใช้งานได้ไม่ว่าจะเป็นเทคโนโลยีใดก็ตาม (ในกรณีนี้คือ RabbitMQ)


TLC ย่อมาจากอะไร?
mvmn

@mvmm TLC ย่อมาจาก Telecommunication โปรดไปที่ [1] [1] allacronyms.com/TLC/Telecommunication
Paolo Maresca

15

JMS เมื่อกำหนดไม่ได้กำหนดโปรโตคอลระหว่างไคลเอ็นต์ JMS และเซิร์ฟเวอร์การส่งข้อความ ไคลเอ็นต์ JMS ซึ่งใช้ JMS API สามารถใช้โปรโตคอลใดก็ได้เพื่อสื่อสารกับเซิร์ฟเวอร์รับส่งข้อความ ไคลเอนต์เพียงแค่ต้องสอดคล้องกับ JMS api นั่นคือทั้งหมด โดยปกติไคลเอนต์ JMS จะใช้โปรโตคอลแบบกำหนดเองที่เซิร์ฟเวอร์การรับส่งข้อความเข้าใจ

ในทางกลับกัน AMQP เป็นโปรโตคอลระหว่างไคลเอ็นต์การรับส่งข้อความและเซิร์ฟเวอร์การส่งข้อความ ไคลเอ็นต์ JMS สามารถใช้ AMQP เป็นโปรโตคอลเพื่อสื่อสารกับเซิร์ฟเวอร์รับส่งข้อความ และมีลูกค้าเช่นนั้น

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


2
  • JMS API เข้ามามีบทบาทอย่างไรที่นี่? JMS API ควรใช้ไลบรารีไคลเอนต์ AMQP เพื่อเชื่อมต่อกับ RabbitMQ หรือไม่

JMS เป็น API ดังนั้น JMS API บางตัวจึงใช้งานผ่านโปรโตคอล AMQP (เช่นApache QPID JMS ) ในขณะที่ JMS API ส่วนใหญ่ใช้โปรโตคอลอื่น หากเวอร์ชันของโปรโตคอล AMQP เหมือนกันไคลเอนต์ดังกล่าวควรจะสามารถสื่อสารกับไคลเอ็นต์ AMQP อื่นได้

  • โดยปกติเราใช้ JMS เพื่อเชื่อมต่อโบรกเกอร์ Message เช่น RabbitMQ, ActiveMQ เป็นต้นแล้วโปรโตคอลเริ่มต้นที่ใช้ที่นี่แทน AMQP คืออะไร?

ขึ้นอยู่กับการกำหนดค่า JMS API นั้นของคุณ สำหรับ ActiveMQ อาจเป็นAMQPแต่โดยค่าเริ่มต้นจะเป็น 'openwire'


2

ฉันต้องการแนะนำบทความช่วยให้ฉันเข้าใจมากขึ้นว่าอะไรคือความแตกต่างระหว่าง AMQP และ JMS

ลิงค์ไปยังเอกสารนี้: http://www.wmrichards.com/amqp.pdf


ไม่มีอะไรสามารถอ่านได้โดยตรงในลิงค์นี้
Bishwas Mishra

0

https://spring.io/understanding/AMQP

AMQP (Advanced Message Queuing Protocol) เป็นข้อกำหนดการเชื่อมต่อที่เผยแพร่อย่างเปิดเผยสำหรับการส่งข้อความแบบอะซิงโครนัส มีการระบุข้อมูลที่ส่งทุกไบต์ คุณลักษณะนี้ช่วยให้สามารถเขียนไลบรารีได้หลายภาษาและทำงานบนระบบปฏิบัติการและสถาปัตยกรรมซีพียูหลายระบบซึ่งทำให้เกิดมาตรฐานการส่งข้อความข้ามแพลตฟอร์มที่ทำงานร่วมกันได้อย่างแท้จริง

AMQP มักถูกเปรียบเทียบกับ JMS (Java Message Service) ซึ่งเป็นระบบการส่งข้อความที่พบมากที่สุดในชุมชน Java ข้อ จำกัด ของ JMS คือระบุ API ไว้ แต่รูปแบบข้อความไม่ได้ ต่างจาก AMQP ตรงที่ JMS ไม่มีข้อกำหนดสำหรับวิธีการสร้างและส่งข้อความ โดยพื้นฐานแล้วโบรกเกอร์ JMS ทุกรายสามารถใช้ข้อความในรูปแบบที่แตกต่างกัน พวกเขาต้องใช้ API เดียวกัน


-1

ฉันสงสัยว่าคุณอาจกำลังมองหาเอกสารนี้ซึ่งระบุว่าบางส่วน:

JMS Client สำหรับ vFabric RabbitMQ คือไลบรารีไคลเอนต์สำหรับ vFabric RabbitMQ vFabric RabbitMQ ไม่ใช่ผู้ให้บริการ JMS แต่มีคุณสมบัติที่จำเป็นเพื่อรองรับโมเดลข้อความ JMS Queue และหัวข้อ ไคลเอ็นต์ JMS สำหรับ RabbitMQ ใช้ข้อกำหนด JMS 1.1 ที่ด้านบนของ RabbitMQ Java ไคลเอ็นต์ API จึงทำให้แอปพลิเคชัน JMS ใหม่และที่มีอยู่สามารถเชื่อมต่อกับโบรกเกอร์ RabbitMQ ผ่าน Advanced Message Queuing Protocol (AMQP)


Nope ไม่ใช่คนที่ฉันมอง แต่คล้ายกัน.
Kevin Rave
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.