2012-04-17 10 views
5

Podczas tworzenia punktu końcowego NServiceBus SendOnly wystarczy po prostu podpalić i zapomnieć, tj. Po prostu wysłać wiadomość, a następnie zajmie się nią ktoś inny. Co wydaje się być tym, czego potrzebuję. Nie chcę żadnej komunikacji między magistralą a systemami obsługującymi komunikaty. System "A" chce powiadomić system "B" o czymś.SendOnly w NServiceBus

Cóż, tworzenie punktu końcowego SendOnly jest bardzo proste, ale co z systemem nasłuchującym wiadomości z punktu końcowego SendOnly.

Próbuję skonfigurować detektor w projekcie wiersza poleceń, który będzie obsługiwał wiadomości. Komunikaty są wysyłane do kolejki, ale nie są obsługiwane przez system "B".

Czy to niewłaściwe podejście? Czy przesada autobusu dla tego typu funkcji?

System 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); 
     } 
    } 
} 

System 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

Czy dodałeś MessageEndpointMappings w pliku app.config nadawcy? Z której wersji programu NServiceBus korzystasz? –

+0

przepraszam, zapomniałem pliki konfiguracyjne dostarczane Używam NserviceBus 3.0.3 –

Odpowiedz

5

W MessageEndpointMappings trzeba aktualizować go w następujący sposób:

  1. Wymień DLL z nazwą zespołu zawierającego twoje wiadomości (np. "Wiadomości")
  2. Zmień Endpoi nt do nazwy kolejki, z której odczytuje System B (Możesz sprawdzić nazwę kolejki, patrząc w przystawce MSMQ w prywatnych kolejkach).
<add Messages="Messages" Endpoint="SystemB" /> 

NServiceBus 3 automatycznie tworzy nazwę kolejki w oparciu o nazw zespołu hostingowej.

Co więcej, możesz chcieć sprawdzić, czy używasz NServiceBus.Host do obsługi programów obsługi, a nie do własnej aplikacji konsoli.

+0

Dzięki, pomyślałem, że punkt końcowy dla komunikatów dla SystemB powinien być tą samą kolejką, którą SystemA używał ... ale najwyraźniej nie :-) –

Powiązane problemy