2015-01-21 14 views
13

My sự hiểu biết của Akka là nó cung cấp một mô hình theo đó nhiều, chủ đề bị cô lập có thể giao tiếp với nhau trong một thời trang đồng thời cao. Nó sử dụng "mô hình diễn viên", trong đó mỗi chủ đề là một "diễn viên" với một công việc cụ thể để làm. Bạn có thể dàn xếp những thông điệp nào được truyền cho những diễn viên nào dưới những điều kiện nào.Akka obsolesce Camel?

Tôi đã sử dụng Camel trước đây và với tôi, tôi cảm thấy như nó đã mất đi ánh sáng/tiện ích của nó khi Akka trưởng thành và tài liệu tốt. Như tôi đã hiểu, Camel là về tích hợp doanh nghiệp, có nghĩa là, tích hợp nhiều hệ thống khác nhau với nhau, thường là trong một số loại dịch vụ xe buýt thời trang.

Nhưng hãy nghĩ về nó: nếu tôi hiện đang sử dụng Camel để:

  • Thăm dò ý kiến ​​một máy chủ FTP cho một tập tin, và một khi tìm thấy ...
  • Chuyển đổi các nội dung của file đó vào một POJO, sau đó ...
  • Gửi một email nếu POJO có một trạng thái nhất định, hoặc
  • Persist POJO đến một cơ sở dữ liệu trong mọi trường hợp khác

tôi có thể làm điều tương tự với Akka; Tôi có thể có 1 diễn viên cho mỗi bước (Poll FTP, chuyển đổi tập tin -> POJO, email hoặc vẫn tồn tại), nối chúng lại với nhau, và để cho Akka xử lý tất cả sự không đồng bộ/đồng thời. Vì vậy, mặc dù Akka là một khuôn khổ đồng thời (sử dụng diễn viên), và mặc dù Camel là về hội nhập, tôi phải hỏi: Akka không thể giải quyết mọi thứ mà Camel làm được không? Không. Trong các từ đó: Trường hợp sử dụng nào vẫn tồn tại để sử dụng Camel over Akka?

+3

Tại sao phiếu giảm giá không có giải thích?Đây không phải là một bản dupe, cho thấy nỗ lực nghiên cứu (theo nghĩa là tôi nghĩ ra một trường hợp/kịch bản sử dụng chính xác), hoàn toàn là mã/lập trình liên quan, và không vi phạm bất cứ điều gì với SSCCE! Có thể có một người cam kết lạc quan không? – smeeb

+1

Akka là một bộ công cụ và thời gian chạy để xây dựng các ứng dụng tin nhắn đồng thời, phân tán và linh hoạt trên JVM. Lạc đà là một EIP. Akka có triển khai các mẫu EIP không? Trong khi Akka có thể làm những gì Camel làm trọng tâm của hai gói này là hoàn toàn khác nhau. – Namphibian

+0

Vâng downvoting mà không có một lời giải thích cũng là một peeve pet của tôi. – Namphibian

Trả lời

22

Akka và Camel là hai con thú khác nhau (bên cạnh một là núi và một là một con vật).

Bạn tự nhắc mình: Akka là công cụ để triển khai mẫu lò phản ứng, tức là một công cụ đồng thời dựa trên thông điệp cho các hệ thống phân phối có khả năng.

Lạc đà là DSL/framwork để triển khai Mẫu tích hợp doanh nghiệp.

Có rất nhiều thứ sẽ khá đẹp ở Akka, thật dễ dàng trong Camel. Giao dịch chắc chắn. Sau đó, tất cả logic logic vận chuyển khác nhau và các tùy chọn, như Akka không có một trừu tượng cho một thông điệp tích hợp. Sau đó, có các EIP phát triển tốt rất tuyệt vời trong Camel, phân tách đa hướng, phân tách, tập hợp, xử lý XML/JSON, phân tích cú pháp tệp văn bản, HL7, chỉ đề cập đến một vài. Tất nhiên, bạn có thể làm tất cả trong java/scala thuần túy, nhưng đó không phải là vấn đề. Vấn đề là để có thể mô tả sự tích hợp bằng cách sử dụng một DSL, không phải để thực hiện logic cơ bản một lần nữa.

Không nhỏ hơn, Akka TOGETHER with Camel khá thú vị. Đặc biệt là sử dụng Scala. Sau đó, bạn có EIP trên đầu trang của các ngữ nghĩa diễn viên, đó là khá mạnh mẽ trong lĩnh vực quyền.

Ví dụ từ akka.io

import akka.actor.Actor 
import akka.camel.{ Producer, Oneway } 
import akka.actor.{ ActorSystem, Props } 

class Orders extends Actor with Producer with Oneway { 
    def endpointUri = "jms:queue:Orders" 
} 

val sys = ActorSystem("some-system") 
val orders = sys.actorOf(Props[Orders]) 

orders ! <order amount="100" currency="PLN" itemId="12345"/> 

Một mẫu đầy đủ/hướng dẫn can be found at typesafe.

+0

Cảm ơn @Petter (+1) - Tôi đoán điều đó có ý nghĩa. Tôi vẫn không nhìn thấy khu rừng thông qua các cây trong ví dụ "Akka w/Camel" cụ thể của bạn: những gì đang xảy ra trong mã đó? Có vẻ như bạn chỉ đang gửi POJO đơn đặt hàng tới hàng đợi JMS - tôi không thể làm điều đó trong Camel (không có Akka) hay chỉ với Akka (sử dụng ứng dụng khách JMS)? Cảm ơn một lần nữa! – smeeb

+0

Chắc chắn, đó là một ví dụ rất đơn giản. Vui lòng đọc liên kết trong câu trả lời để biết thêm các ví dụ và chi tiết. Bản chất của nó là ngay cả akka cũng quảng bá Camel như một lớp tích hợp cho các ứng dụng dựa trên Akka. –

+0

Yêu thích dòng cuối cùng của ví dụ! Sử dụng rất khéo léo hỗ trợ XML của Scala. –