22

Gần đây tôi đã đọc rất nhiều về tin nhắn được phân phối và các mẫu liên quan. Tôi sử dụng một số trong số họ được hỗ trợ bởi các công cụ như cho exemple NServiceBus.Lẫn lộn về mẫu tin nhắn Bus/Command Dispatcher

Nhiều mẫu trong số đó được mô tả trên internet. Một số trong số họ thời gian gần đây tôi đọc là:

Nếu sử dụng các công cụ như NService cho xe buýt để làm rất nhiều mà không cần suy nghĩ nhiều về vấn đề cơ sở hạ tầng, một số câu hỏi h ave araised khi tôi cố gắng thực hiện một Message Bus cơ bản và trình xử lý lệnh. Trong thực tế khi nói đến những mô hình này tôi không thể thấy nhiều sự khác biệt giữa chúng.

Tôi sẽ không dán mã vì nó dài nhưng tôi tìm thấy hai bài đăng trên blog mô tả khá rõ ý tưởng triển khai mà tôi muốn nói đến.

Ý tưởng là đơn giản, các xe buýt thông điệp theo dõi thuê bao và công văn thông điệp cho thuê bao khác nhau nếu họ quan tâm đến

Xe buýt khá giống với tin nhắn. Bus lệnh gọi các trình xử lý lệnh cho một kiểu lệnh đã cho.

Vì vậy, trong cả hai trường hợp đều có điểm tương đồng.

Sự khác biệt và lợi ích thực sự bằng cách sử dụng một mẫu khác (tôi không nói về công cụ hỗ trợ). Tôi thiếu gì?

Câu hỏi thứ hai là. Xe buýt thông báo có giá trị không có công cụ hỗ trợ không? Tôi không nhìn thấy bản thân mình để thúc đẩy sự hỗ trợ cho tất cả các người thuê nhà của riêng tôi.

Tôi xin lỗi vì một câu hỏi dài và khó hiểu nhưng đừng ngần ngại hỏi thêm chi tiết.

Trả lời

41

Woah, sẽ rất khó để đưa ra câu trả lời kỹ lưỡng hơn hoặc đáng tin cậy hơn MSDN mà bạn đã liên kết, vì vậy hãy cho phép ngắn gọn hơn.

Bus thông báo có liên quan với thông tin liên lạc. Nó thậm chí không yêu cầu giao tiếp được truyền đi là một lệnh hay không. Nó cũng không quan tâm trọng tải là gì. Nó là "loại thuyết bất khả tri". Mối quan tâm chính của bus tin nhắn đơn giản là theo dõi ai sẽ nhận được từng phần giao tiếp (pub/sub). Lợi ích của mô hình này là nó sẽ hỗ trợ mở rộng trong tương lai mà bạn chưa có thông số kỹ thuật. Bạn có thể thêm vào một loại thông báo mới xuống đường và mô hình này sẽ rất vui khi phân phối nó.Một tin nhắn xe buýt có nhiều khả năng được phân phối bên ngoài ứng dụng của bạn và có lẽ ngay cả bên ngoài máy tính của bạn (nói phân phối giữa một cụm 10 máy chủ).

Mô hình trình xử lý lệnh có liên quan đến việc tách các hành động khỏi thực thi lệnh. Theo truyền thống (ít nhất là trong các ngôn ngữ tôi sử dụng) lệnh được liên kết rất chặt chẽ với điều khiển giao diện người dùng và các sự kiện của họ và chuỗi giao diện người dùng. Với mô hình cũ này, cũng rất khó để tùy chỉnh hoặc mở rộng phạm vi của các lệnh có sẵn trong ứng dụng của bạn (nói với một phần mở rộng DLL). Mô hình trình xử lý lệnh phân tách các mối quan tâm về giao diện người dùng và thực thi lệnh. Bây giờ bạn có thể linh hoạt để dễ dàng thêm nhiều trình xử lý lệnh và thực thi lệnh mà không cần sự kiện giao diện người dùng (Đơn vị có thể kiểm tra). Điều này làm cho mã sạch hơn, mô đun hơn và có thể thử nghiệm hơn. Trình xử lý lệnh có nhiều khả năng là một phần của ứng dụng của bạn trong nội bộ. Bất kỳ phần mở rộng nào để thu thập lệnh của bạn đều có khả năng ảnh hưởng đến một ứng dụng của bạn chứ không ảnh hưởng đến nhiều ứng dụng.

Nhà môi giới thông báo/lệnh có liên quan đến việc kết nối các hệ thống độc lập không tương thích hoặc được thiết kế khác nhau. Đây là trường hợp sử dụng mà bạn muốn một ứng dụng giao tiếp với một ứng dụng khác và không có mã nguồn cho một hoặc cả hai ứng dụng. Vì vậy, bạn tạo một nhà môi giới nhận thông tin từ một phía và cung cấp thông tin này ở phía bên kia có tính đến bất kỳ biến đổi nào cần thiết cho hai ứng dụng này để giao tiếp. Ví dụ trên MSDN là một trang web thương mại điện tử có thể cần phải nói chuyện với một bộ xử lý thanh toán, một công ty vận chuyển và một hệ thống kế toán. Bạn có thể không có khả năng thay đổi mã nguồn cho bất kỳ ứng dụng nào trong số các ứng dụng này (bao gồm cả hệ thống thương mại điện tử). Có thể hệ thống thương mại điện tử yêu cầu giao diện IExamplePaymentGateway và nhà cung cấp thanh toán của bạn yêu cầu giao diện IDifferentPaymentAPI. Có thể một API được triển khai trong XML và một API khác trong JSON? Bất kể sự khác biệt, người môi giới của bạn có trách nhiệm thực hiện kết nối có thể.

Như bạn có thể thấy tất cả đều liên quan đến giao tiếp theo cách này hay cách khác. Các dòng giữa chúng có thể bị mờ và thậm chí bạn có thể sử dụng kết hợp một vài mẫu này để đạt được trường hợp sử dụng cụ thể của bạn.

Trong khi tôi chưa bao giờ sử dụng NServiceBus, hầu hết các loại thư viện này chỉ đơn giản là cố gắng kết hợp các mô hình trừu tượng/học thuật vào các triển khai cụ thể về ngôn ngữ cụ thể hơn. Đôi khi điều này giúp bạn tiết kiệm thời gian, đôi khi bạn gặp khó khăn với việc triển khai kém từ một người đóng góp nguồn mở không xác định. Bạn sẽ cần phải đánh giá trường hợp sử dụng của riêng bạn và sự phù hợp của các công cụ có sẵn trong ngôn ngữ phát triển ưa thích của bạn.

+0

Tôi nghĩ rằng lời giải thích của bạn xứng đáng được chấp nhận. Cảm ơn. –

3

Nói chung, một bus thông báo (hoặc một bộ điều phối sự kiện tiêu chuẩn) có thể có nhiều người đăng ký cho các loại tin nhắn/sự kiện khác nhau.

Xe buýt lệnh thường là gửi lệnh đến đúng 1 trình xử lý, tương tự như bộ định tuyến phân giải tuyến đến bộ điều khiển.