我跟着Getting Started With NServiceBus - Code First Article,当我尝试从客户端应用程序(NServiceBusDemo.Client)发送消息时,我得到以下异常:
2013-05-27 12:27:50,514 [7] ERROR NServiceBusDemo.Client.SendOrder [(null)]<(nu ll)> - 启动端点时出现问题。 Common.Logging.ConfigurationException:目标队列 'server @ jasper'找不到。您可能错误配置了 这种消息的目的地 (NServiceBusDemo.Messages.Commands.PlaceOrder)中 MessageEndpointMappin中的UnicastBusConfig部分 配置文件。也可能是给定队列的情况 尚未创建,或已被删除。 - - > NServiceBus.Unicast.Queuing.QueueNotFoundException:无法发送消息地址:[server @ jasper] ---> System.Messaging.MessageQueueException:队列不存在或 您没有足够的权限来执行操作。
自从我使用NServiceBus以来已经很长时间了,但我确实记得我必须添加消息端点映射(在教程中未提及):
<UnicastBusConfig ForwardReceivedMessagesTo="audit">
<MessageEndpointMappings>
<add Messages="NServiceBusDemo.Messages" Endpoint="NServiceBusDemo.Server"/>
</MessageEndpointMappings>
</UnicastBusConfig>
当我查看消息队列控制台时,我创建了以下私有队列:
答案 0 :(得分:3)
问题是文章中的代码明确指定了端点名称“Server”(我已更改)。正如@UdiDahan在twitter上指出的那样,优先于MessageEndpointMappings ,这就是为什么文章中没有提到映射的原因。
我将客户端代码更新为而不是指定端点,因此使用app.config中的设置:
public class SendOrder : IWantToRunAtStartup
{
public IBus Bus { get; set; }
public void Run()
{
string product;
while ((product = Console.ReadLine()) != "q")
{
Bus.Send(new PlaceOrder() { Product = product });
}
}
public void Stop()
{
}
}
答案 1 :(得分:1)
我有类似的问题(即同样的错误),但我的问题的解决方案与您的不同。我想在这里分享,以确保其他人不会遇到同样的问题。
对我来说,问题出现了,因为控制台应用程序没有启动。我不得不将启动项目设置为解决方案,该解决方案配置为启动Web应用程序和控制台应用程序。这样做之后,一切都开始有效了。
我希望能帮助别人。