2012-04-17 12 views
5

Al crear un punto final NServiceBus sendonly, el propósito es simplemente dispara y olvida, es decir, simplemente enviar un mensaje y luego otra persona se hará cargo de ella. Lo cual parece ser lo que necesito. No quiero ninguna comunicación entre el bus y el sistema que maneja los mensajes. El sistema "A" desea notificar al sistema "B" sobre algo.sendonly en NServiceBus

bien la creación de un punto final sendonly si es muy sencillo, pero ¿qué pasa con el sistema de escucha de mensajes desde un punto final sendonly.

estoy tratando de establecer un oyente en un proyecto de línea de comandos que se encargará de los mensajes. Los mensajes se envían a la cola, pero el sistema "B" no los maneja.

Es este el camino equivocado? ¿Es un exceso de autobús para este tipo de funcionalidad?

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

Sistema 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

¿Ha añadido los MessageEndpointMappings en el app.config del remitente? Además, ¿qué versión de NServiceBus estás usando? –

+0

lo siento, se olvidó de la .configs estoy usando NserviceBus 3.0.3 –

Respuesta

5

En los MessageEndpointMappings que necesita actualizar la siguiente manera:

  1. Reemplazar DLL con el nombre del ensamblado que contiene sus mensajes (por ejemplo, "Mensajes")
  2. Cambiar el Endpoi nt al nombre de la cola de la que está leyendo el Sistema B (Puede verificar el nombre de la cola mirando en el snap de MSMQ en colas privadas).
<add Messages="Messages" Endpoint="SystemB" /> 

NServiceBus 3 crea automáticamente el nombre de la cola con base en el espacio de nombres del conjunto del alojamiento.

Además, es posible que desee buscar en el uso del NServiceBus.Host para alojar sus manipuladores en vez de su propia aplicación de consola.

+0

Gracias, pensé que el punto final para los mensajes de SystemB debería ser la misma cola que utilizó SystemA ... pero aparentemente no :-) –

Cuestiones relacionadas