2010-08-25 15 views
6

Al usar la versión 2.0.0.1219no puede conseguir la auto anfitrión para trabajar en NServiceBus

que estoy tratando de acogida auto tanto un suscriptor y editor con NServiceBus y VS2010. Los programas se ejecutan y se inicializan, pero no puedo hacer que los mensajes se muevan. El editor actúa como si estuviera publicando, sin errores, pero el suscriptor no recibe nada.

Aquí está la configuración de abonados

<?xml version="1.0"?> 
<configuration> 
    <configSections> 
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/> 
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/> 
    </configSections> 

    <!-- in order to configure remote endpoints use the format: "[email protected]" 
     input queue must be on the same machine as the process feeding off of it. 
     error queue can (and often should) be on a different machine. 
    --> 

    <MsmqTransportConfig InputQueue="loads" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5"/> 

    <UnicastBusConfig> 
    <MessageEndpointMappings> 
     <add Messages="NServiceMessage" Endpoint="loads"/> 
    </MessageEndpointMappings> 
    </UnicastBusConfig> 
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration> 

Y el editor de configuración

<?xml version="1.0"?> 
<configuration> 

    <configSections> 
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/> 
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/> 
    </configSections> 

    <MsmqTransportConfig InputQueue="loads" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5"/> 

    <UnicastBusConfig DistributorControlAddress="" DistributorDataAddress="" ForwardReceivedMessagesTo=""> 
    <MessageEndpointMappings> 
     <!-- publishers don't need to set this for their own message types --> 
     <!--<add Messages="Messages" Endpoint="messagebus" />--> 
    </MessageEndpointMappings> 
    </UnicastBusConfig> 

    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    </startup> 

</configuration> 

Aquí está el código del editor:

class Program 
{ 
    private static IBus _serviceBus; 

    static void Main(string[] args) 
    { 
     _serviceBus = Configure.With() 
      .Log4Net() 
      .DefaultBuilder() 
      .XmlSerializer() 
      .MsmqSubscriptionStorage() 
      .MsmqTransport() 
      .UnicastBus() 
      .LoadMessageHandlers() 
      .CreateBus() 
      .Start(); 

     while (true) 
     { 
      Console.WriteLine("Press a key to send data."); 
      Console.ReadKey(); 
      SendMessaage(); 
     } 
    } 


    private static void SendMessaage() 
    { 
     LoadMessage message = GetNextMessage(); 
     _serviceBus.Publish(message); 
    } 

    private static LoadMessage GetNextMessage() 
    { 
     LoadMessage result = new LoadMessage(); 

     result.DeliveryDate = DateTime.Today.AddDays(3).ToShortDateString(); 
     result.DestinationCity = "Boise"; 
     result.DestinationCountry = "USA"; 
     result.DestinationState = "ID"; 
     result.EventId = Guid.NewGuid(); 
     result.Time = DateTime.Now.ToUniversalTime(); 
     result.OriginState = "OR"; 
     result.OriginCity = "Portland"; 
     result.OriginCountry = "USA"; 
     result.EquipmentID = 3; 

     return result; 
    } 
} 

Y el código de abonado

class Program 
{ 
    private static IBus _serviceBus; 
    private static LoadMessageHandler _messageHandler; 

    static void Main(string[] args) 
    { 
     _messageHandler = new LoadMessageHandler(); 

     _serviceBus = Configure 
      .With() 
      .Log4Net() 
      .DefaultBuilder() 
      .BinarySerializer() 
      .MsmqSubscriptionStorage() 
      .MsmqTransport() 
      .UnicastBus() 
      .LoadMessageHandlers() 
      .CreateBus() 
      .Start(); 

     Console.ReadKey(); 
    } 
} 

Y el mensaje de código

public class LoadMessageHandler : IHandleMessages<LoadMessage> 
{ 
    public void Handle(LoadMessage message) 
    { 
     Console.WriteLine(String.Format("GUID: {0}", message.EventId)); 
    } 
} 
+0

Se necesita un código más completo, incluidos los espacios de nombres y dlls de destino, para determinar la causa de este problema. NServiceMessage en se refiere a la dll donde se define el tipo LoadMessage. – Cirdec

Respuesta

5

Más problemas:

1: El transporte MSMQ debe estar configurado como transaccional para el editor para aceptar mensajes de suscripción. Consulte http://blogs.planbsoftware.co.nz/?p=234 para ver un ejemplo de configuración de estos.

2: Publisher está utilizando XmLSerializer y el suscriptor está utilizando BinarySerializer, lo que los hace incompatibles.

+0

Gracias, eso fue, es la segunda mitad de lo que obtuve mal. – Steve

5

Usted parece usar la misma cola de entrada para los dos puntos finales, moverle suscriptor a su propia cola y ver si funciona.

También no es necesario configurar un almacenamiento de suscripción para su suscriptor, ya que es el editor el responsable de almacenar la información de suscripción.

Espero que esto ayude!

+0

Gracias, es la primera mitad de lo que obtuve mal. – Steve

Cuestiones relacionadas