Tôi đang phát triển một hệ thống để hỗ trợ nhận thông tin trạng thái từ nhiều loại phần cứng khác nhau. Mỗi phần cứng đều báo cáo cùng một thông tin trạng thái (Latitude, Longitude), nhưng mỗi loại phần cứng sử dụng một giao thức duy nhất để báo cáo thông tin này. Vì lý do này, tôi có nhiều dịch vụ, một cho mỗi loại thiết bị, mà lắng nghe và phân tích cú pháp giao thức của thiết bị đó. Tôi muốn cho mỗi người trong số các dịch vụ này để công bố các thông tin trạng thái sử dụng một thông điệp chung:Điểm cuối NServiceBus có thể đăng ký với nhiều nhà xuất bản cùng một thông điệp không?
public interface IPositionMessage : IMessage
{
string UnitName { get; set; }
double Latitude { get; set; }
double Longitude { get; set; }
}
Tôi không có lỗi khi thiết lập dịch vụ đầu tiên của tôi, nhưng bây giờ mà tôi đang thiết lập dịch vụ thứ hai của tôi Tôi thấy rằng người đăng ký của tôi không thể đăng ký cùng một tin nhắn từ nhiều nhà xuất bản.
Trong một question on the NServiceBus yahoo group tương tự, giải pháp được đề xuất là chuyển đổi thông báo chung thành lệnh và sử dụng Bus.Gửi chứ không phải Bus.Publish. Tôi không cảm thấy có ý nghĩa trong kịch bản này vì điều thực sự xảy ra là một sự kiện (đơn vị đã đến một vị trí và đang báo cáo vị trí mới). Nếu tôi chuyển đổi lệnh này thành lệnh, tôi sẽ cần phải biết trước tất cả những người đăng ký tiềm năng cho sự kiện này mà tôi không biết. Một giải pháp khác có thể là tạo ra một tập hợp/tái xuất bản mà mỗi dịch vụ sẽ Bus.Send to, và sau đó thông điệp sẽ được tái bản từ một nhà xuất bản duy nhất. Điều này có vẻ như một nút cổ chai không cần thiết.
Có phương pháp nào để cho phép người đăng ký đăng ký cùng một thông điệp từ nhiều nhà xuất bản không?
AFAIK, thực tiễn không tốt để xuất bản từ nhiều nhà xuất bản LOGICAL. –
Theo quan điểm của tôi, mỗi dịch vụ là một nút vật lý tham gia như là một phần của một nhà xuất bản hợp lý. Kịch bản của tôi sẽ không khác nếu tôi có một dịch vụ triển khai thực hiện và tôi cần phải mở rộng quy mô để cài đặt nó trên một máy thứ hai. – JadeMason