2009-05-12 28 views
20

Những lợi thế lớn từ JMS trên Webservices hoặc ngược lại là gì?JMS vs Webservices

(Are webservices cồng kềnh là JMS tổng thể tốt hơn để cung cấp các giao diện?)

Trả lời

27

EDITED sau khi sửa từ Erickson:

JMS đòi hỏi bạn phải có một nhà cung cấp JMS, một lớp Java mà thực hiện giao diện MessageListener cho xử lý tin nhắn và khách hàng biết cách kết nối với hàng đợi JMS. JMS có nghĩa là xử lý không đồng bộ - máy khách gửi thông điệp và không nhất thiết phải chờ phản hồi. JMS có thể được sử dụng trong một thời trang hàng đợi point-to-point hoặc xuất bản/đăng ký.

"Dịch vụ" là thuật ngữ lỏng. Tôi nghĩ về một dịch vụ như một thành phần tồn tại trên mạng và quảng cáo một hợp đồng: "Nếu bạn gửi cho tôi X tôi sẽ thực hiện nhiệm vụ này cho bạn và trả lại Y."

Các thành phần phân tán đã tồn tại trong một thời gian dài. Mỗi người được giao tiếp bằng cách sử dụng một giao thức khác (ví dụ: COM, Corba, RMI, v.v.) và phơi bày hợp đồng của họ theo nhiều cách khác nhau.

Dịch vụ web là xu hướng mới nhất trong các dịch vụ được phân phối. Họ sử dụng HTTP làm giao thức của họ và có thể tương thích với bất kỳ ứng dụng khách nào có thể kết nối qua TCP/IP và thực hiện yêu cầu HTTP.

Bạn có thể sử dụng kiểu SOAP hoặc RPC-XML hoặc REST hoặc "hợp đồng đầu tiên", nhưng ý tưởng cơ bản về thành phần được phân phối bằng HTTP khi giao thức của nó vẫn còn.

Nếu bạn chấp nhận tất cả điều này, dịch vụ web thường là các cuộc gọi đồng bộ. Họ không cần phải cồng kềnh, nhưng bạn có thể viết các thành phần xấu trong bất kỳ phong cách hoặc ngôn ngữ nào.

Bạn có thể bắt đầu thiết kế bất kỳ thành phần phân phối nào bằng cách thiết kế yêu cầu và phản hồi trước. Với những điều đó, bạn chọn JMS hoặc các dịch vụ web dựa trên loại ứng dụng khách mà bạn muốn có và liệu giao tiếp có đồng bộ hay không đồng bộ.

+1

JMS không phải là chỉ Java. JMS được thiết kế cẩn thận để cho phép các nhà cung cấp cung cấp các giao diện Java cho các dịch vụ tin nhắn độc quyền của họ. Ngoài ra còn có các nhà cung cấp JMS cho các giao thức nhắn tin mở như ebXML. Cả hai cách tiếp cận cho phép một ứng dụng Java dựa trên JMS tương thích với các ứng dụng nhắn tin trên các nền tảng khác. – erickson

+0

Cảm ơn bạn đã sửa, erickson. – duffymo

+0

Vì vậy WS- * và JMS là cả hai cách để quảng cáo các hợp đồng cho truyền thông phân tán. Khi nào tôi nên sử dụng WS- * và khi nào tôi nên sử dụng JMS? Tôi đã đọc http://www.unf.edu/~ree/1024IC.pdf. JMS hoạt động tốt hơn WS- * cho các tập dữ liệu nhỏ ở đó và cung cấp hỗ trợ cho "mục tiêu ngoại tuyến" và WS- * có thể xử lý lượng dữ liệu lớn hơn tốt hơn. Đó có phải là lợi thế/bất lợi duy nhất không? Có đủ khả năng để viết các điểm cuối JMS bằng các điểm cuối WS- * không? Làm thế nào để đưa ra quyết định giữa một trong số họ? Có vẻ như JMS nhẹ hơn phải không? –

0

Từ những gì tôi đã thực hiện ở đây là sự khác biệt tôi đã tìm thấy: JMS - Tôi bị ràng buộc với nhà cung cấp JMS - tuy nhiên tôi có lựa chọn loại triển khai (pub/sub, point to point) Dịch vụ web - dễ dàng hơn để xử lý/kiến ​​trúc sư - tuy nhiên nó là một giao tiếp trực tiếp giữa các hộp. Rất nhiều công cụ để sử dụng để phát triển - và một giao diện sạch (WSDL's) để người triển khai và người gọi có thể độc lập.

Loại nào để sử dụng? Phụ thuộc vào vấn đề là gì.

+1

WSDL không phải là sự bảo đảm độc lập. Nếu bạn trưng ra các lớp Java, bạn phải làm cho chúng có sẵn cho cả máy khách và máy chủ. Các thay đổi trong các lớp được hiển thị trong WSDL yêu cầu cập nhật cho cả hai. "hợp đồng đầu tiên" XML là một cách tốt hơn để đi. – duffymo

4

Tôi muốn nói sự khác biệt lớn nhất là JMS là định hướng thư, chứ không phải theo định hướng RPC. Out-of-the-box, hầu hết các nhà cung cấp JMS hỗ trợ các giao thức cấp cao thực hiện thử lại, ngăn chặn các bản sao và hỗ trợ các giao dịch.

Có nhiều ứng dụng mà các khả năng này không cần thiết. Nhưng ở những nơi cần thiết, việc xây dựng chúng dựa trên cơ chế RPC là phức tạp, tốn kém và dễ xảy ra lỗi.

+0

HTTP và XML và SOAP không yêu cầu mô hình RPC. Trong thực tế WCF bên trong .NET có các tùy chọn để xử lý các giao tiếp như các tin nhắn gửi đến và gửi đi. Nó rất thông điệp. Tôi nghĩ có những phép ẩn dụ tương tự có sẵn trong các ngăn xếp "dịch vụ web" dựa trên Java. – Cheeso

+0

Chắc chắn, bạn có thể chuyển "tin nhắn" qua RPC và Java cũng cung cấp khả năng đó. Bởi "định hướng thư", tôi có nghĩa là không đồng bộ, đáng tin cậy và giao dịch, đó là những thứ bạn không nhận được từ một dịch vụ web dựa trên REST hoặc WS- ... mặc dù bạn có thể, tất nhiên, xác định mức cao hơn cần thiết giao thức bằng cách sử dụng các hoạt động đồng bộ không đáng tin cậy, cá nhân. – erickson

6

Hệ thống dựa trên tin nhắn, bao gồm JMS, cung cấp khả năng được "tách riêng theo trình tự thời gian" từ đầu bên kia. Một tin nhắn có thể được gửi mà không có đầu kia đang có sẵn.

Tất cả các phương pháp tiếp cận A2A phổ biến khác yêu cầu đối tác để có thể phản hồi ngay lập tức, yêu cầu họ có thể xử lý tải cao điểm, với ít khả năng xử lý lây lan.

1

Có thể thêm nhận xét này làm nhận xét cho bài đăng của dyffymo nhưng chưa có đại diện.

Trích dẫn từ câu trả lời của bạn:..

"dịch vụ Web là xu hướng mới nhất trong dịch vụ phân phối Họ sử dụng HTTP là giao thức của họ và có thể tương thích với bất kỳ khách hàng có thể kết nối qua giao thức TCP/IP và thực hiện một yêu cầu HTTP

Bạn có thể sử dụng kiểu SOAP hoặc RPC-XML hoặc REST hoặc "hợp đồng đầu tiên", nhưng ý tưởng cơ bản của thành phần được phân phối bằng HTTP khi giao thức của nó vẫn còn. "


Tôi giả định bởi các dịch vụ web bạn có nghĩa là WS- * bộ giao thức, WSDL và SOAP. Nếu vậy, thì không cái nào trong số này yêu cầu sử dụng HTTP làm giao thức "truyền tải". Tập hợp các giao thức SOA được thiết kế là không thuyết phục như các giao thức tramission được sử dụng, vì vậy bạn có thể sử dụng HTTP, NamedPipes, TCP nguyên, và thậm chí JMS như là phương tiện truyền tải thông điệp đến và từ một dịch vụ web. Vì vậy, trong trường hợp sử dụng trực tiếp JMS so với sử dụng "dịch vụ web", tôi nghĩ nó chủ yếu tập trung vào công cụ, mức độ thoải mái, và liệu bạn có thực sự cần truy cập trực tiếp vào một số tính năng cụ thể của JMS hay không (sử dụng WS -...) * sẽ ẩn từ bạn). Tại thời điểm này tôi sẽ nghĩ rằng chỉ có các ứng dụng khá specilized sẽ yêu cầu truy cập JMS nguyên.

2

Hãy để tôi nói về việc thực hiện giao thức SOAP của dịch vụ web ... tốt hơn JMS so với webservices .... JMS cung cấp giao thức truyền tải và nó là nhà cung cấp dịch vụ nhắn tin cơ bản mô tả nhà cung cấp JMS ur tốt hay xấu. MQ là một nhà cung cấp JMS mạnh mẽ đáng tin cậy khi giao thức SOAP có thể được coi là cả giao thức cấp ứng dụng và cũng có thể được coi là giao thức truyền tải (theo nghĩa của SOAP/HTTP) ... sự phù hợp của SOAP hỗ trợ tiêu chuẩn dựa trên XML. ..và một giao thức mức ứng dụng, chúng tôi coi SOAP là một thông điệp được truyền từ một hệ thống này sang giao thức truyền tải khác, như giao thức truyền tải, SOAP có thể được coi như một container để vận chuyển tải trọng (dữ liệu tin nhắn) ... SOAP/HTTP cũng có thể được xem như là nhà cung cấp dịch vụ tìm kiếm JMS .... nhưng ở dạng sau, HTTP có vấn đề đáng tin cậy, vì nó invloves các lỗi liên quan đến mạng, kết nối socket, băng thông vv ... nhà cung cấp tin nhắn đáng tin cậy làm cho nó trở thành tiêu chuẩn tốt cho việc tương tác với giao thức truyền tải tốt nơi webservice như một giao thức mức ứng dụng làm cho ứng dụng khác nhau giao tiếp bằng giao thức giống như XML ... hy vọng điều này sẽ làm rõ ...

0

Tất cả phụ thuộc vào yêu cầu của bạn, bạn sẽ sử dụng khung làm việc nào và môi trường và hành vi ứng dụng của bạn. Nếu bạn có thể đưa ra một cái nhìn tổng quan về điều đó thì bạn có thể nhận được một câu trả lời cứng nhắc.

Bây giờ nó giống như so sánh một chiếc xe tải với một chiếc xe sedan, Bạn phải biết những gì bạn sẽ sử dụng nó cho và trên con đường để có thể quyết định cái nào tốt hơn.

1

Dịch vụ web là triển khai Kiến trúc hướng dịch vụ (SOA). Một SOA có ba bên: một nhà cung cấp, một nhà môi giới và một người yêu cầu, được kết hợp lỏng lẻo. Nhà cung cấp cung cấp dịch vụ kinh doanh đại diện cho việc triển khai cụ thể, không hiển thị trực tiếp với người yêu cầu. Người yêu cầu học hỏi từ môi giới cấu trúc thông tin mà nó phải gửi và nhận từ nhà cung cấp và giao thức nào để sử dụng để truy cập dịch vụ đó. Người yêu cầu không có kiến ​​thức về cách nhà cung cấp triển khai dịch vụ kinh doanh.

Dịch vụ web được định nghĩa là giao diện kinh doanh bắt buộc giữa người yêu cầu và nhà cung cấp chứ không phải là đường ống chung cho tất cả yêu cầu kinh doanh.Có một số biến có thể mô tả các dịch vụ web, bao gồm:

  • Chúng có thể được kết hợp chặt chẽ và triển khai của chúng có thể dựa trên việc sử dụng khung gọi.
  • Chúng có thể thực hiện ở chế độ yêu cầu/trả lời đồng bộ hoặc ở chế độ không đồng bộ.
  • Các nhà cung cấp J2EE hoặc không phải J2EE có thể tiếp xúc với họ.
  • Họ có thể hoặc không thể cung cấp hỗ trợ cho các giao dịch và bảo mật.

JMS là một giao diện thông báo dựa trên không đồng bộ. Bạn cũng có thể sử dụng JMS để truy cập vào logic nghiệp vụ được phân phối giữa các hệ thống không đồng nhất. Có giao diện dựa trên thông báo cho phép các chức năng sau:

Chỉ đến điểm và xuất bản/đăng ký cơ chế. Khung dựa trên thông báo có thể đẩy thông tin đến các ứng dụng khác mà không yêu cầu chúng một cách rõ ràng. Cùng một thông tin có thể được gửi tới nhiều người đăng ký song song.

Nhịp điệu độc lập. Chức năng khung JMS ở chế độ không đồng bộ nhưng cũng cung cấp khả năng mô phỏng chế độ yêu cầu/phản hồi đồng bộ. Điều này cho phép các hệ thống nguồn và đích hoạt động đồng thời mà không cần phải chờ đợi lẫn nhau.

Đảm bảo cung cấp thông tin. Các khung công tác JMS có thể quản lý các thông báo trong chế độ giao dịch và đảm bảo việc gửi tin nhắn (nhưng không có bất kỳ sự đảm bảo về thời gian giao hàng).

Khả năng tương tác giữa các khung không đồng nhất. Các ứng dụng nguồn và đích có thể hoạt động trong các môi trường không đồng nhất mà không phải xử lý các vấn đề truyền thông và thực thi liên quan đến các khuôn khổ tương ứng của chúng.

Trao đổi thêm chất lỏng. Việc chuyển sang chế độ tin nhắn cho phép trao đổi thông tin chi tiết hơn.

enter image description here

Source

1

JMS và WS cả cho phép phân phối các ứng dụng. Sự khác biệt là không đồng bộ (JMS) so với đồng bộ (Dịch vụ Web). Các dịch vụ Web có thể được thực hiện theo kiểu SOAP hoặc REST. JMS là một api hỗ trợ giao tiếp ở hai chế độ - điểm-điểm và xuất bản-đăng ký. Apache ActiveMQ, RabitMQ là một trong số nhiều người triển khai JMS.