2013-03-06 145 views
2

我玩的是我安裝在本地機器上的Windows服務總線(不是Azure)。我按照這裏的例子,但換了我的本地實例:http://www.windowsazure.com/en-us/develop/net/how-to-guides/service-bus-queues/Windows服務總線 - 多個接收器

我有兩個控制檯應用程序設置現在,一個是接收器,另一個是發件人。接收器只是監聽新的消息和不輸出的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

我放慢了讀者的步伐,他們都在收到消息。所以現在我知道這不是一個設置問題,但是一個空隊列或其他實例讀取的速度太快。謝謝! – 2013-03-06 06:58:15