2010-03-11 99 views
1

我已经以非常相似的方式设置了关于它的博客文章,但是在启动时遇到了一个队列错误。Rhino.ServiceBus为什么不自动创建我的所有队列?

msmq://localhost/colin_console_queue不会由我的程序自动创建。

我很确定我只是没有做正确的事,但我不知道我省略了什么。

我确实发现了'DisableAutoQueueCreation'属性,我试图在各种配置元素上将它设置为false,我甚至发现它作为RhinoServiceBusFacility上的一个属性可用,所以我尝试将它设置为那里。不幸的是,似乎没有任何工作。

如果我更改这两个网址指向相同的队列应用程序基本上可以工作,但我相当确信这不是我应该做的。我查看了星巴克示例应用程序以了解它的功能,但似乎在代码中使用硬编码路径进行了大量设置。

<facilities> 
    <facility id="rhino.esb"> 
    <bus threadCount="1" numberOfRetries="5" endpoint="msmq://localhost/colin_console_queue_bus" 
     logEndpoint="msmq://localhost/colin_console_queue_bus.log" /> 
    <messages> 
     <add name="ConsoleApplication1" endpoint="msmq://localhost/colin_console_queue" /> 
    </messages> 
    </facility> 
</facilities> 

这是我用来测试如何使用队列的测试程序。

static void Main(string[] args) 
    { 
     var container = new WindsorContainer(new XmlInterpreter()); 
     container.Kernel.AddFacility("rhino.esb", new RhinoServiceBusFacility()); 
     if (args.Length > 0) 
     { 
      var bus = container.Resolve<IStartableServiceBus>(); 
      bus.Start(); 
      bus.Send(new EmailMessage { Message = args[0], To = "test" }); 
      bus.Dispose(); 
     } 
     else 
     { 
      container.Register(AllTypes.FromAssembly(Assembly.GetExecutingAssembly()).BasedOn(typeof(IMessageConsumer))); 
      var bus = container.Resolve<IStartableServiceBus>(); 
      bus.Start(); 
      Console.ReadLine(); 
      Console.WriteLine("Bus stopped"); 
      bus.Dispose(); 
     } 
    } 

以下是错误我得到的,

Unhandled Exception: System.Transactions.TransactionException: Failed to send message to Uri: msmq://colin-pc/colin_console_queue ---> Rhino.ServiceBus.Exceptions.TransportException: The queue msmq://colin-pc/colin_console_queue does not exists 
    at Rhino.ServiceBus.Msmq.OpenedQueue..ctor(QueueInfo info, MessageQueue queue, String url, Nullable`1 transactional) in D:\Work\rhino-esb\Rhino.ServiceBus\Msmq\OpenedQueue.cs:line 24 
    at Rhino.ServiceBus.Msmq.QueueInfo.Open(QueueAccessMode access, IMessageFormatter formatter) in D:\Work\rhino-esb\Rhino.ServiceBus\Msmq\QueueInfo.cs:line 71 
    at Rhino.ServiceBus.Msmq.QueueInfo.Open(QueueAccessMode access) in D:\Work\rhino-esb\Rhino.ServiceBus\Msmq\QueueInfo.cs:line 63 
    at Rhino.ServiceBus.Msmq.MsmqTransport.SendMessageToQueue(Message message, Endpoint endpoint) in D:\Work\rhino-esb\Rhino.ServiceBus\Msmq\MsmqTransport.cs:line 303 

回答

3

感谢Ayende(通过电子邮件),答案证明是因为您听的队列(在巴士标签中提到的队列)是您自动负责创建的唯一队列。

虽然我的示例程序相当有缺陷,但是我完全重写了一些内容,并使用单向队列来确保正确理解它(好吧,我想我是这么做的!)。我或许会在某个时候提出这个例子,因为我一定会有点困难。

0

好,在一般的web应用程序不应该的东西作为抵达迪南到基础设施的消息队列排队服务器的配置做行政诉讼。真。正常的行政指导 - 这就是为什么程序员可能不认为有人会尝试这种做法。 )

看到了,可能会有更多的设置你的队列比你想象的;)就像配置它。

手动设置队列。

+0

对不起,我没有试图从网站配置队列。那是一些关于我在做什么的不必要的“背景”信息,所以我已经从问题中删除了它。 – 2010-03-11 10:00:40

相关问题