2012-10-08 40 views
6

Chúng tôi sử dụng công cụ tập trung vào java sử dụng JMS cả trong nội bộ và để giao tiếp với phần mềm java bên ngoài. Bây giờ chúng ta phải thiết lập một giao diện mới cho một ứng dụng C#. Nhà cung cấp JMS của chúng tôi cung cấp triển khai C# hoạt động nhưng tôi không hoàn toàn chắc chắn rằng JMS là cách để thực hiện trong trường hợp này. Nó sẽ giới thiệu một phụ thuộc nhà cung cấp cụ thể mới trong một ứng dụng C# cho cả chi tiết về việc triển khai và sự hỗ trợ của khách hàng.Nhắn tin qua ngôn ngữ chéo

Một số googling đã dẫn tôi đến STOMP mà dường như là một giao thức cấp dây được hỗ trợ bởi nhiều nhà môi giới tin nhắn có khả năng JMS (hornetq, activemq, ...) nhưng dường như có sự thiếu khác biệt của các khách hàng thực tế trong C# (và java ở một mức độ nào đó). Mà không delving quá sâu tôi cũng không hoàn toàn chắc chắn, nơi nhấn mạnh vào "văn bản" đi vào chơi? Nó không hỗ trợ các đối tượng nhị phân?

Một giải pháp khác có thể là AMQP là một giao thức cấp dây khác nhưng thông số 1.0 chưa được phát hành và chúng tôi rất mệt mỏi khi triển khai thông số 0,9.1 4 năm vì có vẻ như đã thay đổi rất nhiều trong 1,0.

Giải pháp nào là tốt nhất cho nhắn tin không đồng bộ giữa các ngôn ngữ xem xét bảo mật, hỗ trợ, giao dịch, tuân thủ tiêu chuẩn, tính di động, ... Lưu ý rằng xà phòng với WS- * thích hợp không phải là tùy chọn cho giao diện cụ thể này.

EDIT1: Tôi đã xem các câu hỏi như Cross-platform, cross-language messaging system? nhưng dường như chúng tập trung vào một công cụ cụ thể hoạt động ở nhiều ngôn ngữ. Tôi thực sự đang tìm kiếm một giao thức tuân thủ các tiêu chuẩn có thể được thực hiện bởi nhiều nhà cung cấp.

+0

Không có vấn đề gì bạn làm bạn sẽ giới thiệu một số chức năng cụ thể nền tảng nhà cung cấp hoặc nhắn tin. Bạn có thể sử dụng email thay vì đó là nền tảng chéo nhưng nó là SMTP cụ thể. –

+0

Giao thức cụ thể không phải là một vấn đề miễn là giao thức là một tiêu chuẩn được thiết lập tốt. Nếu SMTP chỉ có sẵn từ một nhà cung cấp cụ thể hoặc khác với nhà cung cấp cho nhà cung cấp, đó sẽ là vấn đề – nablex

+0

JMS là giao diện thiết lập yêu cầu bạn tải trình điều khiển thích hợp cho máy chủ bạn đang sử dụng. Bạn sẽ có thể viết mã lõi của bạn để lựa chọn máy chủ được sử dụng có thể được cấu hình mà không cần thay đổi mã của bạn. –

Trả lời

1

Tùy chọn sẽ trừu tượng ứng dụng khách C# từ giao thức thông báo cụ thể bên dưới và cho phép nó hoạt động ở cấp độ cổng vào và ra ngoài, trong đó cổng và cổng ra được thực hiện với bộ điều hợp interop thông thường - cơ sở dữ liệu quan hệ, dịch vụ web, tệp xml trong thư mục cụ thể. Bạn có trách nhiệm cung cấp bộ điều hợp và cầu nối giữa bộ điều hợp và hệ thống con nhắn tin nhưng có những lợi ích rõ ràng: nghĩa vụ lẫn nhau giữa các môi trường doanh nghiệp được xác định ở mức rất phổ biến. Bạn thậm chí có thể thay thế hệ thống phụ tin nhắn một ngày nào đó và giữ lại tất cả các cổng vào và ra của bạn. Nói cách khác, máy khách C# thậm chí sẽ không nhận thấy rằng bạn đã thay thế JMS bằng một cơ sở hạ tầng tin nhắn khác vì nó vẫn gửi/nhận dữ liệu từ cùng một bộ điều hợp.

+0

Chúng tôi không có kiến ​​thức C# trong nhóm phần mềm của mình để chúng tôi có thể được hỗ trợ để hỗ trợ các bộ điều hợp riêng của mình. Tóm tắt phần phụ trợ tin nhắn thực tế sẽ luôn là một phần của giải pháp mặc dù sự trừu tượng sẽ phải được quản lý bởi nhóm ứng dụng C#. – nablex

+0

Đó là lý do tại sao tôi đề nghị một bộ các bộ điều hợp thông thường mà bạn chắc chắn C# không có vấn đề gì. Chúng tôi duy trì một giải pháp tương tự, sự khác biệt duy nhất là chúng tôi sử dụng MSMQ làm hệ thống con nhắn tin và trình bao được viết bằng C#. Và ý tưởng về các adapter phổ biến hoạt động tốt, các PHP và Java không có vấn đề gì khi viết vào cơ sở dữ liệu quan hệ và cung cấp các dịch vụ web của riêng chúng dựa trên các đặc tả WSDL. Đó là lý do tại sao tôi tin rằng cách tiếp cận tương tự sẽ làm việc cho bạn. –

+0

Có nhưng ai đó phải duy trì cầu C# -java nghĩa là chúng ta phải đọc MSMQ, họ phải viết cho JMS hoặc chúng ta phải tìm một giao thức khác thực hiện thủ thuật (không phải dịch vụ web và chắc chắn không phải cơ sở dữ liệu/hệ thống tập tin). – nablex

1

Tôi không biết mình có hiểu đúng câu hỏi của bạn hay không RabbitMQ là triển khai AMQP và có các ràng buộc cho C# và Java.

Để ngăn chặn "phụ thuộc mới của nhà cung cấp cụ thể trong ứng dụng C#", bạn có thể muốn xem Messaging Component in the Spring.Net framework cũng như dự án related AMQP for .Net của họ. Điều này cho phép bạn có các POCO và logic nghiệp vụ tách biệt với phần mềm trung gian và cơ sở hạ tầng tin nhắn.

+0

Vì AMQP 1.0 chưa được hoàn tất, tôi không chắc liệu đây có phải là lựa chọn tốt nhất vào thời điểm này không? – nablex

+0

Thành phần thư được liên kết của Spring.Net cũng có các MQ khác (ví dụ: TIBCO EMS, Apache ActiveMQ/NMS). – tobsen

+0

Điều này có thể nằm ngoài phạm vi của câu hỏi ban đầu nhưng là mùa xuân như là một phụ thuộc lớn trong .NET như nó là trong java? Bạn có thể chỉ đơn giản là sử dụng các thành phần tin nhắn giống như bạn sẽ api JMS mà không có toàn bộ java EE stack? Tuyên bố từ chối trách nhiệm: Tôi không có nền tảng trong C# cũng như vào mùa xuân. – nablex

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