Akka có lỗi với các nhà môi giới tin nhắn JMS / AMQP không? [đóng cửa]


19

Tôi đã dành tuần cuối cùng để tìm hiểu sâu về các tài liệu của Akkacuối cùng cũng hiểu hệ thống diễn viên là gì và những vấn đề mà họ giải quyết.

Sự hiểu biết của tôi (và kinh nghiệm với) các nhà môi giới tin nhắn JMS / AMQP truyền thống là họ tồn tại để cung cấp các thông tin sau:

  • Xử lý không đồng bộ giữa người sản xuất và người tiêu dùng; và
  • Đảm bảo gửi tin nhắn, bao gồm kiên trì, thử lại và dự phòng

Nhưng Akka không cung cấp điều này, mà không có tất cả các cơ sở hạ tầng cần thiết và chi phí hoạt động?

  • Trong Akka, tất cả các giao tiếp diễn viên là không đồng bộ và không chặn; và
  • Trong Akka, SupervisorStrategiestồn tại để thực hiện thử lại, dự phòng và leo thang. Các diễn viên có thể được cấu hình để duy trì hầu như bất kỳ loại cửa hàng nào, nếu đây cũng là một yêu cầu.

Vì vậy, điều này làm tôi tự hỏi: nếu ứng dụng của tôi sử dụng Akka, tôi có bao giờ có nhu cầu đưa các nhà môi giới JMS / AMQP (ví dụ ActiveMQ, RabbitMQ, Kafka) vào hình ảnh không? Nói cách khác, có bao giờ một trường hợp sử dụng nơi một ứng dụng mới Akka-based sẽ sau đó cũng bảo đảm sự ra đời của một mới cụm môi giới JMS / AMQP? Tại sao hay tại sao không?

Lập luận duy nhất là có lẽ ứng dụng Akka của tôi phải tích hợp với một hệ thống khác. Nhưng trong trường hợp đó, mô-đun Akka-Camel cho phép Akka truy cập vào danh sách các khả năng tích hợp gần như vô tận của Camel (TCP, FTP, ZeroMQ, danh sách sẽ tiếp tục và bật ...).

Suy nghĩ?


3
Không phải đoạn cuối của bạn là một lý do tại sao Akka không làm cho các nhà môi giới tin nhắn trở nên lỗi thời? Ví dụ: tôi đang làm việc trên một ứng dụng Java tương tác với các ứng dụng C ++ từ xa thông qua một nhà môi giới thông báo tuân thủ JMS. Tôi có thể viết ứng dụng Java của mình bằng Akka-Camel, nhưng tôi vẫn sẽ cần người môi giới vì ứng dụng C ++.
Thomas Owens

Ahhh cảm ơn @ThomasOwens (+1) nhưng bạn đã (đúng như vậy) đã hiểu nhầm câu hỏi của tôi. Tôi sẽ thay đổi từ ngữ trong một vài phút để nó rõ ràng hơn. Những gì tôi đang thực sự hỏi là: nếu tôi đang xây dựng một ứng dụng Akka, tôi sẽ không bao giờ cần phải cũng giới thiệu một mới môi giới JMS / AMQP? Tôi nghĩ câu trả lời là "không", bởi vì Akka + Camel (một lần nữa tôi nghĩ ) giải quyết tất cả các vấn đề thường được giải quyết bởi một nhà môi giới. Trong ví dụ của bạn, nhà môi giới JMS đã tồn tại như một cách để giao tiếp với ứng dụng C ++; Tôi không thêm nó cùng với ứng dụng Akka mới của tôi. Và vì vậy, mô-đun Akka-Camel sẽ chăm sóc nhắn tin cho tôi.
smeeb

2
Có thể tôi hiểu nhầm, nhưng Camel không thay thế JMS (ví dụ), nhưng nó cung cấp một giao diện có thể được sử dụng để gửi tin nhắn qua JMS. Bạn có thể thay thế JMS bằng AMQP, RabbitMQ hoặc XMPP. Trong ví dụ của tôi, ngay cả khi các ứng dụng Java + Akka và C ++ của tôi là hoàn toàn mới, để chúng giao tiếp qua JMS, tôi vẫn cần phải giới thiệu một số loại hàng đợi tin nhắn tuân thủ JMS và sau đó tôi có thể sử dụng Akka-Camel để giao tiếp với nó Lạc đà không cung cấp một nhà môi giới, chỉ có nghĩa là để giao tiếp trong một số giao thức. Akka-Camel cung cấp giao diện quen thuộc hơn giao diện của Camel.
Thomas Owens

Cảm ơn một lần nữa @ThomasOwens (+1) - Tôi nghĩ bạn chỉ đang xem xét lại điều này :-). Trong ví dụ của bạn có một ứng dụng C ++ hiện tại - có lẽ là một số hệ thống cũ và có một nhà môi giới tuân thủ JMS hiện có mà ứng dụng C ++ đã sử dụng để tích hợp với thế giới bên ngoài. Trong trường hợp này, ứng dụng Akka mới của tôi sẽ - giống như bạn đã nói - sử dụng mô-đun Akka-Camel để tạo / tiêu thụ tin nhắn đến / từ nhà môi giới này. Nhưng đây không phải là những gì tôi yêu cầu ở đây! Tôi đang tự hỏi nếu có bao giờ là một lý do mà tôi sẽ cần phải xây dựng 2 điều : (1) ứng dụng Akka mới của tôi, và (2) một nhà môi giới JMS / AMQP, cùng một lúc ...
smeeb

3
Bạn đề cập đến khả năng tích hợp vô hạn của Camel nhưng nó không thể tích hợp với Không có gì. Cần phải có một cái gì đó để nó tích hợp với nó, nếu không, bạn chỉ cần tận hưởng sự hỗ trợ cho một loạt các dịch vụ mà bạn không chạy. Khởi động JMS, hoặc máy chủ HTTP hoặc FTP hoặc thứ gì đó nếu bạn muốn sử dụng Camel để tích hợp với thứ gì đó. Mặt khác, nó chỉ cung cấp khả năng tích hợp vô hạn trong khi tích hợp với không có gì.
Jimmy Hoffa

Câu trả lời:


12

Người mẫu diễn viên

Mô hình diễn viên là chiến lược khoa học máy tính để xây dựng các ứng dụng xử lý nhiều tính toán đồng thời và xử lý trạng thái. Đây không phải là chiến lược duy nhất mà là cách tiếp cận được thử nghiệm rất đơn giản, đơn giản và đáng tin cậy để chuyển tính toán thành các diễn viên , giao tiếp thông qua các thông điệp mà họ xử lý một lần và theo thứ tự.

Akka là một khung công tác triển khai mô hình diễn viên và cho phép bạn xây dựng các hệ thống diễn viên với tất cả các cơ sở hạ tầng và các tính năng đã được xây dựng (như sử dụng JQuery thay vì javascript).

Nhắn tin

Hệ thống tin nhắn là các ứng dụng có thể gửi và lấy tin nhắn. Có nhiều loại từ hàng đợi cơ bản đến phần mềm doanh nghiệp lớn với các chủ đề, quán rượu / phụ, sự kiên trì và các tính năng khác nhưng mục tiêu cuối cùng là như nhau. Lưu một số byte ở đâu đó và lấy lại chúng sau, với một số thứ tự. Trường hợp sử dụng chính hiện nay là tách các hệ thống và cho phép xử lý không đồng bộ ở các lịch trình hoặc tốc độ khác nhau. RabbitMQ, NATS, Kafka, v.v ... là tất cả các ví dụ về hệ thống tin nhắn.

So sánh

Mô hình Actor và khung Akka là các công cụ cấp thấp là một cách tuyệt vời để xây dựng các ứng dụng , như hàng đợi tin nhắn.

Bạn có thể sử dụng Akka thay vì một hàng đợi tin nhắn? Chắc chắn rồi. Nếu bạn đang xây dựng phần mềm đã sử dụng mô hình diễn viên thì có lẽ bạn không cần hàng đợi tin nhắn bên ngoài, đặc biệt là để gửi tin nhắn trong cùng một chủ đề hoặc ứng dụng. Bạn có thể sử dụng các khả năng của Akka Remote để gửi tin nhắn đến các hệ thống diễn viên khác đang chạy trên các máy khác.

Tuy nhiên, điều này có làm cho hệ thống nhắn tin trở nên lỗi thời? Tuyệt đối không. Chỉ vì bạn có thể tự mình viết mã tất cả những thứ này không có nghĩa là bạn cần, đặc biệt là khi mô hình diễn viên không tốt cho vấn đề của bạn hoặc bạn cần các ngôn ngữ, ứng dụng, API bên ngoài, hệ điều hành, cơ sở dữ liệu, v.v. để giao tiếp với nhau (cho dù họ là hệ thống diễn viên hay không).

Nếu bạn chỉ cần chuyển một số tin nhắn giữa hai hệ thống, hãy sử dụng hàng đợi tin nhắn. Nếu bạn cần xử lý trạng thái có thể mở rộng và nhắn tin có độ trễ thấp trong cùng một ứng dụng, thì hãy sử dụng mô hình diễn viên. Cả hai đều tồn tại ở các cấp độ hoàn toàn khác nhau và cách bạn sử dụng chúng phụ thuộc vào giải pháp bạn đang xây dựng.


Có một câu trả lời tuyệt vời trên SO về mô hình diễn viên tương tự này so với nhắn tin: /programming/5693346/when-to-use-actors-instead-of-messaging-solutions-such-as-websphere-mq- hoặc tibco

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.