1

私はそれについてのブログ投稿と非常によく似た方法で設定しましたが、キューの1つについて起動時にエラーが発生します。

msmq://localhost/colin_console_queue私のプログラムによって自動的に作成されません。

私は自分が正しいことをしていないとかなり確信していますが、何を省略したのかわかりません。

'DisableAutoQueueCreation'属性を発見し、さまざまな構成要素でfalseに設定してみました。また、プロパティとして使用できることもわかったRhinoServiceBusFacilityので、そこでも設定してみました。残念ながら、それはどれもうまくいかなかったようです。

同じキューを指すように2つのURLを変更すると、アプリは基本的に機能しますが、それは私が行うことになっていることではないと確信しています。スターバックスのサンプルアプリを見て、その機能を確認しましたが、コード内のハードコードされたパスを使用して多くのセットアップを行っているようです。

<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
4

2 に答える 2

3

Ayende (電子メール経由) のおかげで、リッスンするキュー (bus タグに記載されているもの) だけが自動的に作成する責任があるため、答えが得られました。

ただし、私のサンプル プログラムにはかなりの欠陥があるため、完全に書き直して、一方向キューを使用して正しく理解できるようにしました (よく理解できたと思います!)。私は確かにすべてを理解するのに少し苦労したので、おそらくある時点で例を挙げます。

于 2010-03-12T14:18:21.237 に答える
0

さて、一般的に、Webアプリケーションは、キューイングサーバーのメッセージキューイング構成のように、インフラストラクチャの中心的なものに対して管理アクションを実行するべきではありません。本当に。通常の管理ギドリン-これが、プログラマーがおそらく誰かがそれを試みるとは思わなかった理由です。

ほら、あなたが思っている以上にキューを設定することにはもっと多くのことがあるかもしれません;)それを設定するのと同じように。

キューを手動で設定します。

于 2010-03-11T09:23:52.620 に答える