Rhino.servicebus가 모든 대기열을 자동으로 생성하지 않는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/2423740

문제

블로그 게시물과 매우 유사한 방식으로 물건을 설정하지만 대기열 중 하나에 대해 시작할 때 오류가 발생합니다.

그만큼 msmq://localhost/colin_console_queue 내 프로그램에 의해 자동으로 생성되지 않습니다.

나는 단지 내가 옳은 일을하지 않는다고 확신하지만 내가 무엇을 생략했는지 모르겠다.

나는 'disableautoqueuecreation'속성을 발견했고 다양한 구성 요소에서 false로 설정하려고 시도했으며 심지어 그것이 속성으로 사용할 수 있음을 발견했습니다. RhinoServiceBusFacility 그래서 저도 거기에 설정하려고했습니다. 불행히도 그 중 어느 것도 효과가없는 것 같았습니다.

두 개의 URL을 변경하여 동일한 대기열을 가리키면 앱이 기본적으로 작동하지만 내가해야 할 일이 아니라고 확신합니다. Starbucks 예제 앱을 살펴보면서 그것이 무엇을하는지 확인했지만 코드에서 하드 코딩 된 경로를 사용하여 많은 설정을 수행하는 것으로 보입니다.

<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
도움이 되었습니까?

해결책

Ayende (이메일을 통해) 덕분에 답변은 당신이 듣는 대기열 (버스 태그에 언급 된 대기열)이 자동으로 작성할 책임이있는 유일한 것이기 때문에 답이 밝혀졌습니다.

내 예제 프로그램은 상당히 결함이 있으므로 사물을 완전히 다시 작성하고 올바르게 이해하기 위해 One Way The Deue를 사용했습니다 (글쎄요!). 나는 아마도 어느 시점에서 예를 들었을 것입니다.

다른 팁

글쎄, 일반적으로 웹 애플리케이션은 큐잉 서버의 메시지 큐잉 구성으로 인프라에 대한 ccentral과 같은 관리 조치를 수행해서는 안됩니다. 진짜. 정상적인 행정 가이드 라인 - 프로그래머는 아마도 누군가가 그것을 시도 할 것이라고 생각하지 않았을 것입니다.

당신이 생각하는 것보다 up 큐를 설정하는 데 더 많은 것이있을 수 있습니다.) 구성하는 것과 같습니다.

대기열을 수동으로 설정하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top