【发布时间】:2011-12-10 20:48:16
【问题描述】:
我是 NServiceBus 世界的新手。我创建了一个新的 NServiceBus 项目,其中包含一个发送/接收 NServiceBus“客户端”、一个向控制台应用程序发送消息的命令以及一个发送/接收 selfhost(控制台应用程序)。
我通过 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();
}
}
我在 selfhost 控制台中有一个消息处理程序,它从不接收来自客户端的消息:
public class RouteMessageReceivedHandler : IHandleMessages<RouteMessageReceived>
{
public void Handle(RouteMessageReceived message)
{
Trace.TraceInformation(message.GetType().Name);
Console.Write("you received a message!!" + message.ToString());
}
}
有人可以分享示例代码,我可以如何处理从我的客户端到我的 selfhost 控制台应用程序中的 Startup 方法的消息吗?非常感谢您!
更新: 当我从我的发送/接收 NServiceBus.Host(客户端)向我的 selfhost 总线(服务器)发送一条消息时,我会收到以下消息:
调试 NServiceBus.Unicast.UnicastBus [(null)] - 调用“HandleBeginMessage” 关于 NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule
调试 NServiceBus.Unicast.UnicastBus [(null)] - 收到 消息 SpecimenTrackBus.TrackRouteManager.InternalMessages.RouteMessageReceived, SpecimenTrackBus.TrackRouteManager.InternalMessages,版本=1.0.0.0,文化=中性, PublicKeyToken=null,ID 为 .###.. 来自发件人 OrderManagement@DavisBLptp
Debug NServiceBus.Unicast.UnicastBus [(null)] 完成处理消息。
调试 NServiceBus.Unicast.UnicastBus [(null)] - 调用“HandleEndMessage” NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule
看起来消息实际上可以被处理,但是,我的 RouteMessageReceivedHandler 永远不会被调用。我通过自己的 exe 文件启动每个应用程序。会不会是线程问题?
【问题讨论】:
标签: c# nservicebus