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ファイルで起動します。それはスレッドの問題かもしれませんか?
ありがとう、ありがとう、ありがとう!!!!!!!!!!!!!!!!!!!!!!私はちょうどそれを見落とした.LoadMessageHandlers()への1回の呼び出し - うまくいきます!NServiceBusのルール!!!!ありがとうございました。 – EnLaCucha