2011-12-10 8 views
1

NServiceBusの新機能です。私はSend/Receive NServiceBus "クライアント"、コンソールアプリケーションにメッセージを送信するコマンド、send/receiveセルフホスト(コンソールアプリケーション)を持つ新しいNServiceBusプロジェクトを作成しました。セルフホストとNServiceBus.hostの間のNServiceBus通信

NServiceBus.Host.exeを介してサービスバス "client"を実行します。

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(); 
    } 
} 
:マイselfhostバスinitilizationは、次のようになります

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

:私はクライアントのバス内の別のCSファイルからテストメッセージを送信

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

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

:私は、次のコードを経由してメッセージを送信することができます

セルフ・ホスト・コンソールに、クライアントからのメッセージを受信しないメッセージ・ハンドラがあります。

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

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

私のセルフ・ホスト・コンソール・アプリケーションのクライアントからスタートアップ・メソッドへのメッセージをどのように処理できるか、誰かがサンプルコードを共有できますか?事前にどうもありがとうございました!

UPDATE: 私は私のselfhostバス(サーバー)に自分の送信/受信NServiceBus.Host(クライアント)からのメッセージを送信すると、私は次のメッセージ受信:

デバッグNServiceBus.Unicast.UnicastBus [(ヌルを)] <> - 受信 メッセージSpecimenTrackBus.TrackRouteManager.InternalMessages.RouteMessageReceived、 SpecimenTrackBus - 'HandleBeginMessage' NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule

デバッグNServiceBus.Unicast.UnicastBus [(ヌル)] <>上を呼び出します。 TrackRout eManager.InternalMessages、IDとバージョン= 1.0.0.0、文化=中立、 なPublicKeyToken = nullを。### ...送信者からのOrderManagement @ DavisBLptp

デバッグNServiceBus.Unicast.UnicastBus [(ヌル)] <>完成取り扱いメッセージ。

デバッグNServiceBus.Unicast.UnicastBus [(ヌル)] <は> - NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule

に 'HandleEndMessage' を呼び出す

が実際に処理することができメッセージのように見えます、しかし、私のRouteMessageReceivedHandlerは決してありませんと呼ばれる。私は、それぞれのアプリケーションを独自のexeファイルで起動します。それはスレッドの問題かもしれませんか?

答えて

2

あなたは私のApp.configファイルで、あなたの設定

+0

ありがとう、ありがとう、ありがとう!!!!!!!!!!!!!!!!!!!!!!私はちょうどそれを見落とした.LoadMessageHandlers()への1回の呼び出し - うまくいきます!NServiceBusのルール!!!!ありがとうございました。 – EnLaCucha

0

ここで、msmqトランスポート構成を維持しますか。このような初期化コードを使用する場合は、MsmqTransportの構成を提供する必要があります。あなたが行を追加する必要があるアプリケーションの設定ファイルで:

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

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

で.LoadMessageHandlers()の呼び出しを逃している私は、次のしている: – EnLaCucha

+0

<構成> <セクション名= "MsmqTransportConfig" タイプ= "NServiceBus.Config.MsmqTransportConfig、NServiceBus.Core" /> <セクション名= "UnicastBusConfig" type = "NServiceBus.Config。UnicastBusConfig、NServiceBus.Core」/> < MessageEndpointMappings> EnLaCucha

関連する問題