2013-03-06 2 views
2

Я играю с Windows Service Bus (Not Azure), который я установил на своем локальном компьютере. Я последовал примеру здесь, но поменял место для моего локального экземпляра: http://www.windowsazure.com/en-us/develop/net/how-to-guides/service-bus-queues/Windows Service Bus - несколько приемников

У меня есть две настройки консольных приложений прямо сейчас, одна из них - приемник, а другая - отправитель. Приемник только прослушивает новые сообщения и делает Console.WriteLine выхода:

// Continuously process messages sent to the "TestQueue" 
      while (true) 
      { 
       BrokeredMessage message = Client.Receive(); 

       if (message != null) 
       { 
        try 
        { 
         Console.WriteLine("Body: " + message.GetBody<string>()); 
         Console.WriteLine("MessageID: " + message.MessageId); 
         Console.WriteLine("Test Property: " + 
          message.Properties["TestProperty"]); 
         Console.WriteLine("----------------------"); 

         // Remove message from queue 
         message.Complete(); 
        } 
        catch (Exception) 
        { 
         // Indicate a problem, unlock message in queue 
         message.Abandon(); 
        } 
       } 
      } 

Далее у меня отправителя:

while (true) 
      { 

       // Create message, passing a string message for the body 
       BrokeredMessage message = new BrokeredMessage("Test message " + i); 

       // Set some addtional custom app-specific properties 
       message.Properties["TestProperty"] = "TestValue"; 
       message.Properties["Message number"] = i; 

       // Send message to the queue 
       Client.Send(message); 

       i++; 

       System.Threading.Thread.Sleep(50); 
      } 

Это на самом деле все прекрасно работает. Я могу запустить 1 приемник, и отправитель, и я могу видеть сообщения. Затем я запускаю второй приемник, и сообщения автоматически передаются между двумя приемниками.

Однако, когда я разворачиваю третий приемник, первый приемник завершает получение сообщений (пока другой не уйдет).

Есть ли способ, чтобы все три (или «n») получателя обрабатывали сообщения из очереди? Я думал, что, возможно, в настройке очереди будет настройка, но я не могу найти ее.

ответ

1

Если вы уменьшите время ожидания отправителя, первый приемник начнет получать сообщения? Возможно, ваша очередь читается так, что второй и третий приемники получают сообщения, но первый приемник не может получить сообщение, потому что очередь пуста.

Является ли ваша цель иметь независимых читателей, обрабатывающих очередь, или вы после общения «один ко многим», где каждый получатель имеет возможность обрабатывать сообщение? Если да, тогда вы должны посмотреть на использование Topics and Subscriptions.

+0

Я затормозил читателей, и теперь все они получают сообщения. Итак, теперь я знаю, что это не проблема с установкой, но пустая очередь или другие экземпляры слишком быстро читали из этой очереди. Благодаря! –

Смежные вопросы