我是NServiceBus世界的新手。我已经创建了一个新的NServiceBus项目,其中包含一个发送/接收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();
}
}我在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 (客户机)向我的自主机总线(服务器)发送消息时,我收到以下消息:
Debug NServiceBus.Unicast.UnicastBus (null) <> -在NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule上调用'HandleBeginMessage‘
SpecimenTrackBus.TrackRouteManager.InternalMessages.RouteMessageReceived,SpecimenTrackBus.TrackRouteManager.InternalMessages,NServiceBus.Unicast.UnicastBus (null) <> -已收到消息Debug version=1.0.0.0,Culture=neutral,PublicKeyToken=null,ID为.###。发件人OrderManagement@DavisBLptp
Debug NServiceBus.Unicast.UnicastBus (null) <>已完成对消息的处理。
Debug NServiceBus.Unicast.UnicastBus (null) <> -在NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule上调用'HandleEndMessage‘
看起来消息实际上是可以处理的,但是我的RouteMessageReceivedHandler从未被调用过。我通过自己的exe文件启动每个应用程序。这可能是线程问题吗?
发布于 2011-12-11 17:35:14
您的配置中缺少对.LoadMessageHandlers()的调用
发布于 2011-12-11 07:18:36
您将msmq传输配置保存在何处?在使用这样的初始化代码时,您需要提供MsmqTransport的配置。在应用程序配置文件中,您需要添加以下几行:
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/>
<MsmqTransportConfig
InputQueue="MyQueue"
NumberOfWorkerThreads="1"
MaxRetries="5"
ErrorQueue="error"
/>https://stackoverflow.com/questions/8459753
复制相似问题