Thế giới thực sử dụng hàng đợi JMS / tin nhắn? [đóng cửa]


182

Tôi mới đọc abit về JMS và Apache ActiveMQ. Và đang tự hỏi những gì sử dụng trong thế giới thực mà mọi người ở đây đã sử dụng JMS hoặc các công nghệ xếp hàng tin nhắn tương tự để làm gì?

Câu trả lời:


191

JMS (ActiveMQ là một triển khai môi giới JMS) có thể được sử dụng như một cơ chế để cho phép xử lý yêu cầu không đồng bộ. Bạn có thể muốn làm điều này vì yêu cầu mất nhiều thời gian để hoàn thành hoặc vì một số bên có thể quan tâm đến yêu cầu thực tế. Một lý do khác để sử dụng nó là cho phép nhiều khách hàng (có khả năng được viết bằng các ngôn ngữ khác nhau) truy cập thông tin qua JMS. ActiveMQ là một ví dụ điển hình ở đây vì bạn có thể sử dụng giao thức STOMP để cho phép truy cập từ máy khách C # / Java / Ruby.

Một ví dụ trong thế giới thực là một ứng dụng web được sử dụng để đặt hàng cho một khách hàng cụ thể. Là một phần của việc đặt thứ tự đó (và lưu trữ nó trong cơ sở dữ liệu), bạn có thể muốn thực hiện một số nhiệm vụ bổ sung:

  • Lưu trữ đơn hàng trong một số loại hệ thống phụ trợ của bên thứ ba (chẳng hạn như SAP)
  • Gửi email cho khách hàng để thông báo cho họ đơn hàng của họ đã được đặt

Để làm điều này, mã ứng dụng của bạn sẽ xuất bản một thông báo lên hàng đợi JMS bao gồm id đơn hàng. Một phần trong ứng dụng của bạn lắng nghe hàng đợi có thể phản hồi sự kiện bằng cách lấy orderId, tìm kiếm thứ tự trong cơ sở dữ liệu và sau đó đặt đơn hàng đó với hệ thống bên thứ ba khác. Một phần khác trong ứng dụng của bạn có thể chịu trách nhiệm lấy orderId và gửi email xác nhận cho khách hàng.


Xin chào @jon bạn đã thấy thẻ Tài liệu này chưa? stackoverflow.com/documentation/jms/commit họ chỉ cần một hỗ trợ committer để cho phép chủ đề này, tôi nghĩ rằng bạn có thể là một :) ai cho phép họ cung cấp cho chúng tôi tài liệu tuyệt vời trên JMS
juanmf

@Jon theo tôi hiểu jms có phải là một triển khai mô hình tích hợp doanh nghiệp không?
valik

Không, Mule hoặc Camel sẽ là ...
Jon

1
Nếu bất kỳ số lượng ứng dụng nào có thể tiêu thụ các tin nhắn trong hàng đợi, làm thế nào để hàng đợi biết khi nào nên xóa các tin nhắn cũ?
Basil Bourque

95

Sử dụng tất cả thời gian để xử lý các hoạt động chạy dài không đồng bộ. Một người dùng web sẽ không muốn đợi hơn 5 giây để yêu cầu xử lý. Nếu bạn có một cái chạy lâu hơn thế, một thiết kế là gửi yêu cầu đến hàng đợi và ngay lập tức gửi lại một URL mà người dùng có thể kiểm tra để xem khi nào công việc kết thúc.

Xuất bản / đăng ký là một kỹ thuật tốt khác để tách người gửi từ nhiều người nhận. Đó là một kiến ​​trúc linh hoạt, bởi vì các thuê bao có thể đến và đi khi cần thiết.


41
Sau khi đọc câu trả lời của bạn, tôi sẽ thêm JMS vào hàng đợi của mình 'Tôi sẽ học gì trong năm nay' :)
Roman

Trong thời đại của chúng ta, thay vì sử dụng thông số JMS, chúng ta có thể sử dụng các cuộc gọi phương thức không đồng bộ. Để biết thêm thông tin, hãy xem: docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html
Geo

3
Chúng không hoàn toàn giống nhau. Không có giao hàng được đảm bảo với một cuộc gọi phương thức asynch; không có khái niệm về các chủ đề có thể gửi cho nhiều người nghe cùng một lúc.
duffymo

75

Tôi đã có rất nhiều ứng dụng tuyệt vời cho JMS:

  • Web giao tiếp trò chuyện cho dịch vụ khách hàng.

  • Ghi nhật ký gỡ lỗi trên phụ trợ. Tất cả các máy chủ ứng dụng phát thông báo gỡ lỗi ở các cấp độ khác nhau. Một máy khách JMS sau đó có thể được khởi chạy để xem các thông báo gỡ lỗi. Chắc chắn tôi đã có thể sử dụng một cái gì đó như syslog , nhưng điều này đã cho tôi tất cả các cách để lọc đầu ra dựa trên thông tin theo ngữ cảnh (eq theo tên máy chủ ứng dụng, cuộc gọi api, cấp độ nhật ký, userid, loại tin nhắn, v.v.). Tôi cũng tô màu đầu ra.

  • Ghi nhật ký gỡ lỗi vào tập tin. Tương tự như trên, chỉ có các phần cụ thể được rút ra bằng các bộ lọc và đăng nhập vào tệp để ghi nhật ký chung.

  • Cảnh báo. Một lần nữa, một thiết lập tương tự như ghi nhật ký ở trên, xem các lỗi cụ thể và cảnh báo mọi người thông qua các phương tiện khác nhau (email, tin nhắn văn bản, IM, cửa sổ bật lên Growl ...)

  • Tự động cấu hình và kiểm soát các cụm phần mềm. Mỗi máy chủ ứng dụng sẽ phát một thông báo "configure me", sau đó một daemon cấu hình sẽ phản hồi với một thông báo chứa tất cả các loại thông tin cấu hình. Sau đó, nếu tất cả các máy chủ ứng dụng cần cấu hình của chúng thay đổi cùng một lúc, nó có thể được thực hiện từ daemon cấu hình.

  • Và thông thường - các giao dịch được xếp hàng cho các hoạt động bị trì hoãn như thanh toán, xử lý đơn hàng, cung cấp, tạo email ...

Thật tuyệt vời ở bất cứ nơi nào bạn muốn đảm bảo gửi tin nhắn không đồng bộ.


5
Tôi thấy có vẻ không đúng khi sử dụng JMS để ghi nhật ký gỡ lỗi. Hàng đợi và nhắn tin có chi phí đáng kể và ghi nhật ký (để gỡ lỗi thường ghi nhật ký nhiều) phải nhanh nhất có thể.
Marco Altieri

19

Phân phối (a) tính toán đồng bộ.
Một ví dụ trong thế giới thực có thể là một khung thông báo trên toàn ứng dụng, gửi thư đến các bên liên quan tại các điểm khác nhau trong quá trình sử dụng ứng dụng. Vì vậy, ứng dụng sẽ hoạt động như một Producerbằng cách tạo một Messageđối tượng, đặt nó vào một cụ thể Queuevà tiến về phía trước.
Sẽ có một nhóm Consumerngười đăng ký Queuecâu hỏi và sẽ cẩn thận xử lý việc Messagegửi qua. Lưu ý rằng trong quá trình giao dịch này, các Producers được tách rời khỏi logic về cách Messagexử lý của một giao dịch cụ thể.
Khung tin nhắn (ActiveMQ và lượt thích) hoạt động như một xương sống để tạo thuận lợi cho các Messagegiao dịch đó bằng cách cung cấp MessageBrokers.


Tôi muốn xử lý không đồng bộ vì RestService Api là đồng bộ. Cách thực hiện với ActiveMq và Jms. Xin hãy giúp đỡ về vấn đề này. stackoverflow.com/questions/19706788/ Mạnh . Cảm ơn sự giúp đỡ và thời gian của bạn
Kumar

10

Tôi đã sử dụng nó để gửi các giao dịch trong ngày giữa các hệ thống quản lý quỹ khác nhau. Nếu bạn muốn tìm hiểu thêm về thông điệp công nghệ tuyệt vời là gì, tôi hoàn toàn có thể giới thiệu cuốn sách " Các mô hình tích hợp doanh nghiệp ". Có một số ví dụ JMS cho những thứ như yêu cầu / trả lời và xuất bản / đăng ký.

Nhắn tin là một công cụ tuyệt vời để tích hợp.


8

Chúng tôi sử dụng nó để bắt đầu xử lý không đồng bộ mà chúng tôi không muốn làm gián đoạn hoặc xung đột với một giao dịch hiện có.

Ví dụ: giả sử bạn có một phần logic đắt tiền và rất quan trọng như "mua đồ", một phần quan trọng của công cụ mua sẽ là 'thông báo cho cửa hàng thứ'. Chúng tôi thực hiện cuộc gọi thông báo không đồng bộ để bất kỳ logic / xử lý nào có liên quan đến cuộc gọi thông báo không chặn hoặc tranh chấp tài nguyên với logic kinh doanh mua. Kết quả cuối cùng, mua xong, người dùng hài lòng, chúng tôi nhận được tiền của chúng tôi và vì hàng đợi được đảm bảo giao hàng, cửa hàng sẽ được thông báo ngay khi mở hoặc ngay khi có hàng mới trong hàng.


1
Xin hãy giúp đỡ về điều này. stackoverflow.com/questions/19706788/ Mạnh . Cảm ơn bạn đã dành thời gian để giúp đỡ.
Kumar

2
Nhưng vì yêu cầu không đồng bộ, vì sự cố mạng, tin nhắn của bạn có thể không được gửi. Cái này thì sao? Khi bạn muốn mua công cụ, nitrat của bạn phải được gửi. phải vậy không?
grep

8

Tôi đã sử dụng nó cho dự án học thuật của mình, đó là trang web bán lẻ trực tuyến tương tự như Amazon. JMS đã được sử dụng để xử lý các tính năng sau:

  1. Cập nhật vị trí của các đơn đặt hàng được đặt bởi khách hàng, khi lô hàng đi từ địa điểm này sang địa điểm khác. Điều này đã được thực hiện bằng cách liên tục gửi tin nhắn đến JMS Queue.
  2. Thông báo về bất kỳ sự kiện bất thường nào như lô hàng bị trì hoãn và sau đó gửi email cho khách hàng.
  3. Nếu giao hàng được đến đích, gửi một sự kiện giao hàng.

Chúng tôi cũng đã thực hiện nhiều máy khách từ xa được kết nối với Máy chủ chính. Nếu kết nối có sẵn, họ sử dụng để truy cập cơ sở dữ liệu chính hoặc nếu không sử dụng cơ sở dữ liệu của riêng họ. Để xử lý tính nhất quán của dữ liệu, chúng tôi đã triển khai cơ chế 2PC. Để làm điều này, chúng tôi đã sử dụng JMS để trao đổi tin nhắn giữa các hệ thống này, tức là một người đóng vai trò điều phối viên sẽ bắt đầu quá trình bằng cách gửi tin nhắn trên hàng đợi và những người khác sẽ trả lời tương ứng bằng cách gửi lại tin nhắn trên hàng đợi. Như những người khác đã đề cập, điều này tương tự như mô hình pub / sub.


6

Tôi đã thấy JMS được sử dụng trong các dự án thương mại và học thuật khác nhau. JMS có thể dễ dàng đi vào hình ảnh của bạn, bất cứ khi nào bạn muốn có một hệ thống phân tán hoàn toàn tách rời. Nói chung, khi bạn cần gửi yêu cầu của mình từ một nút và ai đó trong mạng của bạn sẽ chăm sóc nó mà không cần / cung cấp cho người gửi bất kỳ thông tin nào về người nhận.

Trong trường hợp của tôi, tôi đã sử dụng JMS trong việc phát triển phần mềm trung gian hướng thông điệp (MOM) trong luận án của mình, trong đó các loại đối tượng hướng đối tượng cụ thể được tạo ở một bên theo yêu cầu của bạn, và được biên dịch và thực hiện ở phía bên kia làm phản hồi của bạn .



5

Chúng tôi đã sử dụng tin nhắn để tạo Báo giá trực tuyến


4

Chúng tôi đang sử dụng JMS để liên lạc với các hệ thống trong một số lượng lớn các trang web từ xa qua các mạng không đáng tin cậy. Khớp nối lỏng lẻo kết hợp với nhắn tin đáng tin cậy tạo ra một cảnh quan hệ thống ổn định: Mỗi tin nhắn sẽ được gửi ngay khi có thể về mặt kỹ thuật, các sự cố lớn hơn trong mạng sẽ không ảnh hưởng đến toàn cảnh hệ thống ...

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.