JMS và AMQP - RabbitMQ


133

Tôi đang cố gắng hiểu JMS là gì và cách nó được kết nối với thuật ngữ AMQP. Tôi biết JMS là một API và AMQP là một giao thức.

Dưới đây là những giả định của tôi (và cả câu hỏi nữa)

  • RabbitMQ sử dụng giao thức AMQP (thay vì thực hiện giao thức AMQP)
  • Các máy khách Java cần sử dụng các thư viện máy khách giao thức AMQP để kết nối / sử dụng RabbitMQ
  • API JMS được sử dụng ở đâu? API JMS nên sử dụng thư viện khách AMQP để kết nối với RabbitMQ?
  • Thông thường chúng ta sử dụng JMS để kết nối các nhà môi giới tin nhắn như RabbitMQ, ActiveMQ, v.v ... Vậy giao thức mặc định được sử dụng ở đây thay vì AMQP là gì?

Một số ở trên có thể bị câm. :-) Nhưng cố gắng quấn đầu tôi xung quanh nó.


3
@KevinRave: Câu trả lời được chọn là sai ở một số điểm chính mà nó đưa ra. Tôi đã thêm một bình luận để bạn có thể nhìn vào nó.
2020

@KevinRave Tôi đã chỉnh sửa câu trả lời. Bây giờ phần gây tranh cãi đã thay thế. Bây giờ toàn bộ câu trả lời là hoàn toàn OK
Freak

Tôi không biết ai sửa câu trả lời của tôi và cho điểm không đúng cách này mà là ở num 3 .. bởi vì tôi đã có hỏi những điều mà kevin đang nói vào thời điểm 2.Always đọc cẩn thận trước khi xuống bỏ phiếu hoặc làm gợi ý
Freak

1
Hãy xem phần JMS trong bài viết này. Nó có một lời giải thích rất chi tiết saipraveenblog.wordpress.com/2014/12/08/ Khăn
java_geek

Câu trả lời:


118

Câu hỏi của bạn hơi lộn xộn và giống như một câu hỏi khó trong một câu hỏi :) (Vì các giáo viên luôn cố gắng hỏi những câu hỏi đơn giản làm phức tạp: DI hy vọng bạn không phải là giáo viên :)) Chúng ta hãy xem từng câu hỏi một.

Như bạn đã biết:

API dịch vụ thông báo Java (JMS) là API trung gian hướng thông báo (MOM) của Java để gửi tin nhắn giữa hai hoặc nhiều máy khách . JMS là một phần của Nền tảng Java, Phiên bản doanh nghiệp và được xác định bởi một đặc tả được phát triển theo Quy trình cộng đồng Java là JSR 914. Đây là một tiêu chuẩn nhắn tin cho phép các thành phần ứng dụng dựa trên Phiên bản Java Enterprise (Java EE) tạo ra, gửi, nhận và đọc tin nhắn. Nó cho phép giao tiếp giữa các thành phần khác nhau của một ứng dụng phân tán được kết nối lỏng lẻo, đáng tin cậy và không đồng bộ .

Bây giờ (từ Wikipedia ):

Giao thức xếp hàng tin nhắn nâng cao (AMQP) là một giao thức lớp ứng dụng tiêu chuẩn mở cho phần mềm trung gian hướng thông báo. Các tính năng xác định của AMQP là định hướng tin nhắn, xếp hàng, định tuyến (bao gồm điểm-điểm và xuất bản và đăng ký), độ tin cậy và bảo mật.

Và điều quan trọng nhất (một lần nữa từ Wikipedia):

Không giống như JMS, chỉ định nghĩa một API, AMQP là một giao thức cấp dây. Giao thức cấp dây là một mô tả về định dạng của dữ liệu được gửi qua mạng dưới dạng luồng octet. Do đó, bất kỳ công cụ nào có thể tạo và giải thích các thông báo phù hợp với định dạng dữ liệu này đều có thể tương tác với bất kỳ công cụ tuân thủ nào khác bất kể ngôn ngữ triển khai

Một số điều quan trọng bạn nên biết:

  1. Hãy nhớ rằng AMQP là một công nghệ nhắn tin không triển khai API JMS.
  2. JMS là API và AMQP là một giao thức. Vì vậy, không có nghĩa gì khi nói rằng giao thức mặc định của JMS là gì, tất nhiên các ứng dụng khách sử dụng HTTP / S làm giao thức kết nối khi gọi Dịch vụ WebLogic.
  3. JMS chỉ là một đặc tả API. Nó không sử dụng bất kỳ giao thức nào. Nhà cung cấp JMS (như ActiveMQ) có thể đang sử dụng bất kỳ giao thức cơ bản nào để nhận ra API JMS. Ví dụ: Apache ActiveMQ có thể sử dụng bất kỳ giao thức nào sau đây: AMQP, MQTT, OpenWire, REST (HTTP), RSS và Atom, Stomp, WSIF, WS Thông báo, XMPP. Tôi khuyên bạn nên đọc Sử dụng JMS Transport làm Giao thức kết nối .

Chúc may mắn :)


20
I am not sure but I believe that AMQP also uses HTTP/S protocol but AMQP is enhacement is messaging protocol over HTTP: Không. Điều đó không đúng. JMS uses simple HTTP but for RabbitMQ/ActiveMq, they uses enhanced protocol.: Không. Điều đó không đúng. JMS chỉ là một đặc tả API. Nó không sử dụng bất kỳ giao thức. Nhà cung cấp JMS (như ActiveMQ) có thể đang sử dụng bất kỳ giao thức cơ bản nào để nhận ra API JMS. Ví dụ: Apache ActiveMQ có thể sử dụng bất kỳ giao thức nào sau đây: AMQP, MQTT, OpenWire, REST (HTTP), RSS và Atom, Stomp, WSIF, WS Thông báo, XMPP.
2020

Tôi đã chỉnh sửa câu trả lời. Bây giờ phần gây tranh cãi đã thay thế.
Freak

1
@brainOverflow Tôi không biết ai sửa câu trả lời của tôi và cho điểm không đúng cách này mà là ở num 3 .. bởi vì tôi đã hỏi những điều mà bạn đang nói vào thời điểm 2.Always đọc cẩn thận trước khi xuống bỏ phiếu hoặc làm gợi ý
Freak

tôi đã thêm nội dung từ bản PDF đó để bạn cũng có thể truy cập một số liên kết khác
Freak

43

Hãy bắt đầu từ cơ sở.

RabbitMQ là một MOM (Middleware hướng thông điệp), được phát triển với Erlang (ngôn ngữ lập trình hướng TLC) và thực hiện giao thức dây AMQP (Giao thức xếp hàng tin nhắn nâng cao). Hiện tại, nhiều API khách hàng (ví dụ: Java, C ++, RESTful, v.v.) có sẵn để cho phép sử dụng các dịch vụ nhắn tin RabbitMQ.

JMS (Dịch vụ nhắn tin Java) là một tiêu chuẩn JCP xác định một bộ API có cấu trúc sẽ được MOM triển khai. Một ví dụ về MOM thực hiện (nghĩa là tương thích với) API JMS là ActiveMQ; cũng có HornetMQ và những người khác. Các phần mềm trung gian như vậy có được các API JMS và triển khai các mẫu trao đổi tương ứng.

Theo ở trên, lấy bộ xương của API JMS, một thể hiện của RabbitMQ và API máy khách Java của nó, có thể phát triển một triển khai JMS sử dụng RabbitMQ: điều duy nhất mà người ta phải làm, tại thời điểm đó, là triển khai mô hình trao đổi (trên RabbitMQ) theo đặc điểm kỹ thuật của JMS.

Chìa khóa là: một bộ API, như JMS, có thể được triển khai bất kể công nghệ (trong trường hợp này là RabbitMQ).


TLC có nghĩa là gì?
mvmn

@mvmm TLC là viết tắt của Viễn thông. Xin vui lòng, hãy xem [1]. [1] allacronyms.com/TLC/Telecomication
Paolo Maresca

15

JMS, khi được định nghĩa không xác định giao thức giữa máy khách JMS và máy chủ nhắn tin. Máy khách JMS, triển khai API JMS có thể sử dụng bất kỳ giao thức nào để giao tiếp với máy chủ nhắn tin. Máy khách chỉ cần tuân thủ với api JMS. Đó là tất cả. Các máy khách JMS thông thường sử dụng một giao thức tùy chỉnh mà máy chủ nhắn tin của họ hiểu được.

AMQP mặt khác là một giao thức giữa máy khách nhắn tin và máy chủ nhắn tin. Máy khách JMS có thể sử dụng AMQP làm giao thức để liên lạc với máy chủ nhắn tin. Và có những khách hàng như thế có sẵn.

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


2
  • API JMS được sử dụng ở đâu? API JMS nên sử dụng thư viện khách AMQP để kết nối với RabbitMQ?

JMS là một API, vì vậy một số API của JMS được triển khai qua giao thức AMQP (như JMS Apache QPID ) trong khi hầu hết các API JMS sử dụng các giao thức khác. Nếu phiên bản của giao thức AMQP giống nhau, một máy khách như vậy sẽ có thể giao tiếp với một máy khách AMQP khác.

  • Thông thường chúng ta sử dụng JMS để kết nối các nhà môi giới tin nhắn như RabbitMQ, ActiveMQ, v.v ... Vậy giao thức mặc định được sử dụng ở đây thay vì AMQP là gì?

Nó phụ thuộc vào cấu hình của bạn về API JMS đó. Đối với ActiveMQ, nó có thể là AMQP nhưng theo mặc định, nó là 'openwire'



0

https://spring.io/under Hiểu / AMQP

AMQP (Giao thức xếp hàng tin nhắn nâng cao) là một đặc tả dây được công bố công khai cho tin nhắn không đồng bộ. Mỗi byte dữ liệu truyền được chỉ định. Đặc tính này cho phép các thư viện được viết bằng nhiều ngôn ngữ và chạy trên nhiều hệ điều hành và kiến ​​trúc CPU, tạo nên một tiêu chuẩn nhắn tin đa nền tảng, có thể tương tác thực sự.

AMQP thường được so sánh với JMS (Java Message Service), hệ thống nhắn tin phổ biến nhất trong cộng đồng Java. Một hạn chế của JMS là các API được chỉ định, nhưng định dạng thông báo thì không. Không giống như AMQP, JMS không có yêu cầu về cách các thông điệp được hình thành và truyền tải. Về cơ bản, mọi nhà môi giới JMS có thể thực hiện các thông báo theo một định dạng khác nhau. Họ chỉ phải sử dụng cùng một API.


-1

Tôi nghi ngờ bạn có thể đang tìm tài liệu này trong đó có phần:

JMS Client cho vFoven RabbitMQ là một thư viện máy khách cho vFoven RabbitMQ. vFoven RabbitMQ không phải là nhà cung cấp JMS nhưng có các tính năng cần thiết để hỗ trợ các mô hình nhắn tin Chủ đề và Hàng đợi của JMS. JMS Client cho RabbitMQ triển khai đặc tả JMS 1.1 trên API máy khách Java RabbitMQ, do đó cho phép các ứng dụng JMS mới và hiện tại kết nối với các nhà môi giới RabbitMQ thông qua Giao thức xếp hàng tin nhắn nâng cao (AMQP).


Không. Nó không phải là cái tôi đang nhìn. Nhưng tương tự.
Kevin Rave
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.