Câu trả lời:
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à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.
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.
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ộ.
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 Producer
bằng cách tạo một Message
đối tượng, đặt nó vào một cụ thể Queue
và tiến về phía trước.
Sẽ có một nhóm Consumer
người đăng ký Queue
câu hỏi và sẽ cẩn thận xử lý việc Message
gửi qua. Lưu ý rằng trong quá trình giao dịch này, các Producer
s được tách rời khỏi logic về cách Message
xử 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 Message
giao dịch đó bằng cách cung cấp MessageBroker
s.
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.
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.
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:
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.
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 .
Lạc đà Apache được sử dụng cùng với ActiveMQ là cách tuyệt vời để thực hiện các mô hình tích hợp doanh nghiệp
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 ...