2012-04-17 25 views
5

Khi tạo điểm cuối NServiceBus SendOnly, mục đích là chỉ cần kích hoạt và quên, tức là chỉ cần gửi một tin nhắn và sau đó một người khác sẽ chăm sóc nó. Có vẻ như điều tôi cần. Tôi không muốn bất kỳ thông tin liên lạc nào giữa xe buýt và hệ thống xử lý tin nhắn. Hệ thống "A" muốn thông báo cho hệ thống "B" về điều gì đó.SendOnly trong NServiceBus

Cũng tạo ra điểm cuối SendOnly nếu rất đơn giản nhưng hệ thống nghe tin nhắn từ điểm cuối SendOnly.

Tôi đang cố thiết lập trình nghe trong dự án dòng lệnh sẽ xử lý thư. Các tin nhắn được gửi đến hàng đợi nhưng chúng không được xử lý bởi hệ thống "B".

Đây có phải là cách tiếp cận sai không? Xe buýt có quá tải cho loại chức năng này không?

Hệ thống A:

public class Program 
{ 
    static void Main(string[] args) 
    { 
     var container = new UnityContainer(); 

     var bus = Configure.With() 
      .UnityBuilder(container) 
      .JsonSerializer() 
      .Log4Net() 
      .MsmqTransport() 
      .UnicastBus() 
      .SendOnly(); 

     while(true) 
     { 
      Console.WriteLine("Send a message"); 
      var message = new Message(Console.ReadLine()); 
      bus.Send(message); 
     } 
    } 
} 

Hệ thống B:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var container = new UnityContainer(); 

     var bus = Configure.With() 
      .UnityBuilder(container) 
      .JsonSerializer() 
      .Log4Net() 
      .MsmqTransport() 
      .UnicastBus() 
      .LoadMessageHandlers() 
      .CreateBus() 
      .Start(); 

     Console.WriteLine("Waiting for messages..."); 

     while(true) 
     { 

     } 
    } 
} 

public class MessageHandler : IHandleMessages<Message> 
{ 
    public void Handle(Message message) 
    { 
     Console.WriteLine(message.Data); 
    } 
} 

public class Message : IMessage 
{ 
    public Message() 
    { 

    } 

    public Message(string data) 
    { 
     Data = data; 
    } 

    public string Data { get; set; } 
} 
+0

Bạn đã thêm MessageEndpointMappings vào app.config của người gửi chưa? Ngoài ra, bạn đang sử dụng phiên bản NServiceBus nào? –

+0

xin lỗi, quên .configs Tôi đang sử dụng NserviceBus 3.0.3 –

Trả lời

5

Trong MessageEndpointMappings bạn cần phải cập nhật nó như sau:

  1. Thay DLL với tên của assembly chứa tin nhắn của bạn (ví dụ: "Tin nhắn")
  2. Thay đổi Endpoi nt vào tên của hàng đợi mà Hệ thống B đang đọc từ (Bạn có thể kiểm tra tên hàng đợi bằng cách tìm trong snapin MSMQ dưới hàng đợi riêng).
<add Messages="Messages" Endpoint="SystemB" /> 

NServiceBus 3 tự động tạo tên hàng đợi dựa trên namespace của lắp ráp lưu trữ.

Ngoài ra, bạn có thể muốn xem xét sử dụng NServiceBus.Host để lưu trữ trình xử lý của mình thay vì ứng dụng bảng điều khiển của riêng bạn.

+0

Cảm ơn, tôi nghĩ rằng điểm cuối cho các thông báo trên cho SystemB phải là cùng một hàng đợi mà SystemA đã sử dụng ... nhưng dường như không :-) –

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