0

我遵循NServiceBus 入门 - 代码第一篇文章,当我尝试从客户端应用程序 (NServiceBusDemo.Client) 发送消息时,出现以下异常:

2013-05-27 12:27:50,514 [7] 错误 NServiceBusDemo.Client.SendOrder [(null)] <(null)> - 启动端点时出现问题。Common.Logging.ConfigurationException:找不到目标队列“server@jasper”。您可能在配置文件的 UnicastBusConfig 部分的 MessageEndpointMappin gs 中错误地配置了此类消息的目的地 (NServiceBusDemo.Messages.Commands.PlaceOrder)。也可能是给定队列尚未创建或已被删除的情况。- --> NServiceBus.Unicast.Queuing.QueueNotFoundException: 无法将消息发送到地址:[server@jasper] ---> System.Messaging.MessageQueueException: 队列不存在或者您没有足够的权限来执行手术。

自从我使用 NServiceBus 已经有很长时间了,但我确实记得必须添加我已经完成的消息端点映射(教程中没有提到):

  <UnicastBusConfig ForwardReceivedMessagesTo="audit">
    <MessageEndpointMappings>
      <add Messages="NServiceBusDemo.Messages" Endpoint="NServiceBusDemo.Server"/>
    </MessageEndpointMappings>
  </UnicastBusConfig>

当我查看消息队列控制台时,我创建了以下私有队列:

  • nservicebusdemo.client
  • nservicebusdemo.client.retries
  • nservicebusdemo.server
  • nservicebusdemo.server.retries
  • nservicebusdemo.server.timeouts
  • nservicebusdemo.server.timeoutsdispatcher
4

2 回答 2

3

问题是文章中的代码明确指定了端点名称“服务器”(我已更改)。正如@UdiDahan 在推特上指出的那样,这优先于 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()
    {

    }
}
于 2013-05-27T13:09:34.353 回答
1

我有一个类似的问题(即相同的错误),但我的问题的解决方案与你的不同。我想在这里分享以确保其他人没有同样的问题。

对我来说,问题的发生是因为控制台应用程序没有启动。我不得不将启动项目设置为解决方案,它被配置为同时启动 Web 应用程序和控制台应用程序。完成此操作后,一切都开始工作了。

我希望这对某人有所帮助。

于 2014-12-24T19:03:11.733 回答