2011-12-10 78 views
1

我是NServiceBus世界的新手。我創建了一個新的NServiceBus項目,其中包含一個發送/接收NServiceBus「客戶端」,一個向控制檯應用程序發送消息的命令以及一個發送/接收自主主機(控制檯應用程序)。自主主機和NServiceBus.host之間的NServiceBus通信

我通過NServiceBus.Host.exe運行服務總線「客戶端」。我可以通過下面的代碼提交郵件:

public class OrderMessaging 
{ 
    public IBus Bus { get; set; } 

    public void SendRouteMessageReceived(LabRoutingUpdateMessage routingUpdateMessage) 
    { 
     Bus.Send(new RouteMessageReceived(routingUpdateMessage)); 
    } 
} 

我從客戶端總線中的另一個CS文件發送測試信息:

class OrderManagementTest : IWantToRunAtStartup 
{ 
    public IBus _bus { get; set; } 

    public void Run() 
    { 
     Console.WriteLine("Press 'Enter' to send a message.To exit, Ctrl + C"); 

     while (Console.ReadLine() != null) 
     { 
      Int64 _trackNum = 999245; 

      Console.WriteLine("Track Number: {0}", _trackNum.ToString()); 

      _labRouteMessage = new LabRoutingUpdateMessage(_trackNum); 

      OrderMessaging Message = new OrderMessaging(); 
      Message.Bus = _bus; 
      Message.SendRouteMessageReceived(_labRouteMessage); 
     } 
    } 
} 

我selfhost總線動初始化是這樣的:

public static class Startup 
{ 
    static void Main(string[] args) 
    { 
     // Setup the bus 
     BusInitializer.Init(); 
     Console.Clear(); 
     Console.ReadLine(); //need to handle messages here from the client 
    } 
} 

public class BusInitializer 
{ 
    public static IBus Bus { get; private set; } 

    public static void Init() 
    { 
     Bus = NServiceBus.Configure.With() 
      .Log4Net() 
      .DefaultBuilder() 
      .XmlSerializer() 
      .MsmqTransport() 
       .IsTransactional(false) 
       .PurgeOnStartup(false) 
      .UnicastBus() 
       .ImpersonateSender(false) 
      .CreateBus() 
      .Start(); 
    } 
} 

我在自主控制檯中有一個消息處理程序,它從不接收來自客戶端的消息:

public class RouteMessageReceivedHandler : IHandleMessages<RouteMessageReceived> 
{ 
    public void Handle(RouteMessageReceived message) 
    { 
     Trace.TraceInformation(message.GetType().Name); 

     Console.Write("you received a message!!" + message.ToString()); 
    } 
} 

有人可以共享示例代碼我可以如何處理從我的客戶端到我的自主控制檯應用程序中的啓動方法的消息?非常感謝您提前!

UPDATE: 當我從發送/接收NServiceBus.Host(客戶端)到我selfhost總線(服務器),收到以下消息發送消息:

調試NServiceBus.Unicast.UnicastBus [(空)] <> - 接收 消息SpecimenTrackBus.TrackRouteManager.InternalMessages.RouteMessageReceived, SpecimenTrackBus - 上NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule

調試NServiceBus.Unicast.UnicastBus [(空)] <>調用 'HandleBeginMessage' 。 TrackRout eManager.InternalMessages,版本= 1.0.0.0,文化=中性 公鑰= null與ID ### ..從發件人OrderManagement @ DavisBLptp

調試NServiceBus.Unicast.UnicastBus [(空)] <>完成處理信息。

調試NServiceBus.Unicast.UnicastBus [(NULL)] <> - 呼喚 'HandleEndMessage' 上 NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule

貌似實際上可以處理的消息,但是,我RouteMessageReceivedHandler是永遠調用。我通過自己的exe文件啓動每個應用程序。它可能是一個線程問題?

回答

2

你缺少.LoadMessageHandlers()的調用

+0

謝謝謝謝謝謝!!!!!!!!!!!!!!!!!!!!!!我只是忽略了一次調用.LoadMessageHandlers() - 效果很棒!NServiceBus規則!!!!非常感謝您的時間。 – EnLaCucha

0

你在哪裏保留你的msmq傳輸配置?當使用這樣的初始化代碼時,您將需要爲MsmqTransport提供配置。在應用程序配置文件,你需要添加行:在您的配置

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

<MsmqTransportConfig 
    InputQueue="MyQueue" 
    NumberOfWorkerThreads="1" 
    MaxRetries="5" 
    ErrorQueue="error" 
    /> 
+0

在我的App.config文件我有以下幾點:? – EnLaCucha

+0

< MessageEndpointMappings> EnLaCucha

相關問題