2015-11-12 20 views
19

Tôi thấy nhiều khuôn khổ/thư viện mà tuyên bố rằng họ có thể giúp xây dựng ứng dụng phản ứng trong Java, chẳng hạn như: Akka, Vert.x, RxJava, lò phản ứng, QBit vvSo sánh các khuôn khổ hoạt Java

Họ dường như có các cách tiếp cận, tính năng, ưu điểm, nhược điểm khác nhau, v.v. Tôi không thể tìm thấy các so sánh không được thực hiện. Có tài liệu về mỗi khung hình này, nhưng không đủ để tôi hiểu sự khác biệt.

Sự khác biệt giữa các khung phản ứng Java chính là gì?

Và các yêu cầu ứng dụng nào có thể thúc đẩy sự lựa chọn khung công tác phản ứng Java?

Cảm ơn bạn đã dành thời gian.

+1

Trong khi akka là dành cho java, cốt lõi của nó được xây dựng bằng cách sử dụng scala và mô hình diễn viên. Nó tỏa sáng khi sử dụng scala vì nó phù hợp hơn với lập trình hàm. Mô hình diễn viên người dùng Akka, trong khi RxJava sử dụng cái gọi là mô hình quan sát. Nếu bạn đang sử dụng scala thì hãy chọn Akka, nếu bạn là một cửa hàng java thì chọn RxJava.Both được sử dụng bởi một số tên tuổi lớn và rất phù hợp cho các hệ thống sản xuất. – Madusudanan

+1

Nhân tiện, tôi ổn với những câu hỏi như thế này, nhưng những người theo chủ nghĩa thuần túy trên SO có thể gắn nhãn câu hỏi này là quá mở. Chỉ cần một đầu lên. –

+0

Dù bạn sử dụng gì, bạn vẫn cần phải tạo luồng. Có một cái nhìn tại bài viết này tôi đã viết tháng trước: http://www.coopsoft.com/ar/ReactiveArticle.html – edharned

Trả lời

22

Tôi đang làm việc trên RxJava và tôi đã thực hiện một số evaluations trên Akka-Stream và Reactor gần đây.

Theo như tôi có thể nói với tất cả các thư viện, chúng hội tụ với một khái niệm duy nhất gọi là Reactive-Streams để bạn có thể chuyển qua lại giữa các triển khai.

Tôi tin rằng RxJava là loại chung nhất, không phụ thuộc vào các thư viện khác và không có ý kiến ​​về đồng thời. Nó rất phổ biến trên Android chủ yếu là do sự hỗ trợ của các thư viện/khung công tác khác như Retrofit. Nhánh 1.x không thực hiện các dòng phản ứng nhưng có các trình bao bọc cho nó trong khi 2.x là tương thích nguyên gốc của luồng tương ứng (hiện có sẵn trong bản xem trước). Nhiều ngôn ngữ lập trình dựa trên JVM phổ biến có bộ điều hợp cho nó (Scala, Kotlin, Clojure, v.v.).

Lò phản ứng là Dòng phản ứng tuân thủ vì đó là thư viện gần đây hơn. Họ có sự phụ thuộc/hỗ trợ cho rất nhiều thư viện khác. Họ đã chọn một loạt các sự cân bằng khác nhau khi nói đến sự đồng thời và xếp hàng trong các luồng (tức là kiểu LMAX Disruptor). Có một vài lần giữa RxJava và RxJava liên quan đến các nhà khai thác và chúng tôi đã bắt đầu nói về việc có một nhóm các nhà khai thác chung.

Akka bị chi phối bởi các khái niệm giống như Scala; Tôi gặp một vấn đề nhỏ khiến nó hoạt động. Nhóm nghiên cứu đã tham gia vào việc phát triển các đặc tính phản hồi dòng và có một thư viện Akka-Stream được quảng cáo để hỗ trợ các dòng phản ứng, tuy nhiên, truy cập nó rất cồng kềnh vì API thông thạo của nó được gắn bó chặt chẽ với mô hình diễn viên Akka.

Nếu bạn ở bên máy chủ/máy tính để bàn/Android, RxJava nói chung là một lựa chọn tốt (và tôi tin là tài liệu tốt hơn những người khác) và nhằm vào các hoạt động không đồng bộ thông lượng cao. Nếu bạn có nhiều hơn về phía độ trễ, lò phản ứng có thể là một lựa chọn tốt hơn. Tôi không biết nhiều về cách sử dụng Akka-Stream nhưng tôi đã thấy một điểm chuẩn một năm trước, nơi một máy chủ web được xây dựng xung quanh Akka vượt trội so với Tomcat và Netty + RxJava.

+1

Qua câu trả lời phổ biến này, tôi muốn chỉ ra rằng kể từ đó Reactor đã tiến hóa giống RxJava2 hơn, như Reactor 3 (thực hiện đầy đủ các luồng phản ứng, rất nhiều từ vựng nhà điều hành chung, không phụ thuộc, nhưng dựa trên java số 8) –