2009-07-10 33 views
9

Tôi đang ở trong thị trường cho một thư viện mẫu dựa trên Pub/Sub (mô hình quan sát) dựa trên nguồn mở tốt. Tôi đã không tìm thấy bất kỳ tôi thích:Xuất bản/Đăng ký tốt nhất "Middleware"

  • JMS - gắn với Java, xử lý nội dung tin nhắn như blobs câm nhị phân

  • NDDS - $$, sử dụng IDL

  • CORBA/ICE - Pub/Sub được xây dựng trên đầu trang của RPC, CORBA API là phi trực quan

  • JBOSS/ESB - không quá quen thuộc với

.210

Nó sẽ được tốt đẹp nếu một gói như vậy có thể như sau:

  • Mạng dựa

  • Aware dữ liệu tải trọng, người dùng không cần phải lo lắng về endian/serialization vấn đề

  • Hỗ trợ đa ngôn ngữ (C++, ruby, Java, python sẽ đẹp)

  • Không có mã được tạo tự động (không có IDL!)

  • trực quan quản lý đăng ký/đề

Đối với niềm vui, tôi đã created my own. Suy nghĩ?

Trả lời

3

Chúng tôi sử dụng triển khai RTI DDS. Chi phí là $$, nhưng nó hỗ trợ nhiều thông số dịch vụ.

Có triển khai DDS miễn phí được gọi là OpenDDS, nhưng tôi chưa sử dụng.

Tôi không thấy cách bạn có thể tìm hiểu nhu cầu xác định trước các loại dữ liệu của bạn nếu ngôn ngữ đích được nhập tĩnh.

+2

Tôi đã luôn luôn nghĩ rằng dữ liệu phải là XML, theo cách đó nó được bán định sẵn (thông qua một lược đồ), nhưng không gắn với một ngôn ngữ. – David

2

Tìm hiểu sâu hơn về các triển khai JMS khác nhau.

Hầu hết chúng không chỉ là Java, chúng cũng cung cấp thư viện khách hàng cho các ngôn ngữ khác.

Suns OpenMQ có ít nhất một giao diện C++, Apache ActiveMQ cung cấp thư viện phía máy khách cho nhiều ngôn ngữ phổ biến.

Khi nói đến định dạng thư, chúng thường được tách riêng khỏi chính phần mềm trung gian của thư. Bạn có thể xác định định dạng tin nhắn của riêng bạn. Bạn có thể định nghĩa lược đồ XML của riêng mình và gửi các tin nhắn XML. Bạn có thể gửi mã hóa BER ASN.1 bằng cách sử dụng thư viện bên thứ 3. nếu bạn muốn. Hoặc định dạng và phân tích cú pháp dữ liệu bằng thư viện JSON.

0

Bạn có thể xem PubSubHubbub. Đó là một phần mở rộng cho Atom/RSS để alow pubsub thông qua webhooks. Giao diện là HTTP và XML, vì vậy nó không phải là ngôn ngữ bất khả tri. Nó đang ngày càng được áp dụng, Google Reader, FriendFeed và FeedBurner đang sử dụng nó.Trường hợp sử dụng chính là blog và nội dung, nhưng tất nhiên bạn có thể có bất kỳ loại tải trọng nào.

Việc triển khai mã nguồn mở duy nhất mà tôi biết cho đến thời điểm này là this one cho Google AppEngine. Họ nói hỗ trợ cho tự lưu trữ đang đến.

1

Bạn có thể quan tâm đến thư viện MUSCLE (tuyên bố từ chối trách nhiệm: tôi đã viết nó, vì vậy tôi có thể bị thiên vị). Tôi nghĩ rằng nó đáp ứng tất cả các tiêu chí bạn đã chỉ định.

https://public.msli.com/lcs/muscle/

0

Ngoài ra còn có DDS OpenSplice. Điều này tương tự như DDS của RTI, ngoại trừ rằng nó là L GPL!

Kiểm tra it ra:

+1

Liên kết tới OpenSplice http://www.opensplice.org/cgi-bin/twiki/view/Community/WebHome – tuergeist

+0

Ông ấy nói "Không có mã được tạo tự động (không có IDL!)" – tobsen

4

Như đã chỉ ra bởi một bài trước đó trong chủ đề này, một trong những lựa chọn của bạn là OpenSplice DDS đó là một thực hiện mã nguồn mở của DDS Chuẩn OMG (cùng một tiêu chuẩn thực hiện bởi NDDS) .

Ưu điểm chính của OpenSplice DDS qua trung gian khác mà bạn đang xem xét có thể được tóm tắt như:

  • Performance
  • Giàu hỗ trợ QoS (Persistence, Fault-Tolerance, kịp thời, vv)
  • Data Centricity (ví dụ: khả năng truy vấn và lọc luồng dữ liệu)

Điều mà tôi muốn hiểu là vấn đề của bạn với IDL là gì. DDS sử dụng IDL làm cách độc lập về ngôn ngữ để chỉ định các kiểu dữ liệu người dùng. Tuy nhiên DDS không giới hạn IDL, bạn có thể sử dụng XML, nếu bạn thích. Ưu điểm của việc xác định kiểu dữ liệu của bạn, và tách đại diện của họ từ một ngôn ngữ lập trình cụ thể, đó là các trung gian có thể:

(1) lấy đi từ bạn những gánh nặng của dữ liệu tuần tự,

(2) tạo ra rất thời gian/không gian serialization hiệu quả,

(3) đảm bảo an toàn kiểu end-to-end,

(4) cho phép lọc nội dung trên kiểu dữ liệu toàn bộ (không chỉ các tiêu đề như thế nào trong JMS), và

(5) enabl e khả năng tương thích dây trên các ngôn ngữ lập trình (ví dụ: Java, C/C++, C#, v.v.)

Tùy thuộc vào hệ thống hoặc ứng dụng bạn đang thiết kế, một số thuộc tính ở trên có thể không hữu ích/có liên quan. Trong trường hợp đó, bạn có thể chỉ cần tạo một, một vài, "DDS Type" là người giữ dữ liệu được tuần tự hóa của bạn.

Nếu bạn nghĩ về JMS, nó cung cấp cho bạn 5 loại chủ đề khác nhau mà bạn có thể sử dụng để gửi dữ liệu của mình. Với DDS, bạn có thể làm tương tự, nhưng bạn có thể linh hoạt để xác định chính xác các loại chủ đề.

Cuối cùng, bạn có thể muốn xem this blog entry trên Scala và DDS để thảo luận dài hơn về lý do loại và kiểu gõ tĩnh là đặc biệt tốt trong các hệ thống phân tán.

-AC

1

Ba tôi đã sử dụng:

  • IBM MQ Series - Quá đắt, khó có thể làm việc với.

  • Tico Rendezvous - (được đổi tên thành EMS?) Rất nhanh, được sử dụng UDP, cũng có thể được sử dụng không có máy chủ trung tâm. Yêu thích của tôi nhưng đắt tiền và đòi hỏi một khoản phí duy trì.

  • ActiveMQ - Tôi đang sử dụng tính năng này nhưng tìm thấy sự cố thường xuyên. Ngoài ra nó đòi hỏi một số dự án được chuyển từ Java như spring.net. Nó hoạt động nhưng tôi không thể khuyên bạn nên nó do vấn đề ổn định.

Cũng được sử dụng MSMQ trong nỗ lực xây dựng Pub/Sub của riêng mình, nhưng vì nó không xử lý nó ra khỏi hộp, bạn viết một số lượng đáng kể mã.

+0

TIBCO Rendezvous và TIBCO EMS là hai sản phẩm khác nhau . EMS là nhà cung cấp JMS bao gồm một hoặc nhiều máy chủ tin nhắn trung tâm. Rendezvous là một middleware pub/sub không kết nối mà không có máy chủ trung tâm. Hai sản phẩm được miễn phí tùy thuộc vào yêu cầu của bạn. – scaganoff

0

IBM Webpshere MQ và giấy phép không quá mở rộng nếu bạn làm việc ở cấp độ doanh nghiệp.

+1

OP đã yêu cầu giải pháp * Nguồn mở *! –

Các vấn đề liên quan