2013-03-06 106 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