NServiceBus - 无法发送消息

时间:2013-05-27 11:37:58

标签: nservicebus

我跟着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>

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

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

2 个答案:

答案 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应用程序和控制台应用程序。这样做之后,一切都开始有效了。

我希望能帮助别人。