Windows Service Bus 1.1定期使用非常低的吞吐量

时间:2014-03-25 13:16:10

标签: c# servicebus

我很遗憾地定期使用内部版本的Service Bus来实现非常低的吞吐量。

正常情况下,发送消息大约需要10毫秒或更短时间,但是发送消息可能需要20秒或更长时间。这持续了2-3分钟,一段时间后消息超时或者服务总线设法处理所有消息的峰值。通过查看下面的Incomming消息性能计数器可以看到这一点。

系统在另一台计算机上运行带有SQL Server 2012的Service Bus 1.1。硬件为Intel Q6600 2.40GHz,4GB RAM和7200rpm磁盘,因此通常可以用于大多数测试目的。

service bus incoming messages performance counter

我已经从我的应用程序中分离出一些代码来重现问题。

static void Main(string[] args)
{
   var connectionString = ConfigurationManager.AppSettings["Microsoft.ServiceBus.ConnectionString"];
   var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);

   namespaceManager.DeleteTopic("TestTopic");
   namespaceManager.CreateTopic("TestTopic");
   namespaceManager.CreateSubscription("TestTopic", "TestSubScription");

   var topicClient = TopicClient.CreateFromConnectionString(connectionString, "TestTopic");

   var msgCounter = 0;
   var cts = new CancellationTokenSource();

   Task.Run(() =>
   {
       while (!cts.IsCancellationRequested)
       {
           Task.Run(() =>
           {
               try
               {
                   Interlocked.Increment(ref msgCounter);

                   var msg = new BrokeredMessage("Body");
                   msg.Properties["MyIntProperty"] = 123;
                   msg.Properties["MyStringProperty"] = "Hello SB";

                   var sw = Stopwatch.StartNew();
                   topicClient.Send(msg);
                   sw.Stop();

                   Trace.WriteLine(string.Format("Message {0} send duration {1}", msgCounter, sw.ElapsedMilliseconds));
               }
               catch (Exception e)
               {
                   Trace.WriteLine("Exception: " + e);
               }
           }, cts.Token);

           Thread.Sleep(20);
       }
   }, cts.Token);

   Console.ReadLine();   
   cts.Cancel();
}

可以看出,这是一个非常低的消息频率,大约30个消息/秒,所以我不明白服务总线如何解决这种低吞吐量。当我将延迟时间延长到50毫秒时,问题仍然存在。

希望有人能够对此有所了解,或提供有关如何继续进行故障排除的见解。

0 个答案:

没有答案