Azure Service Bus QueueClient性能

时间:2013-10-18 08:04:42

标签: c# azure azureservicebus

我很难在Google上获得好评。我有一个Web应用程序,它使用QueueClient在用户创建记录时对消息进行排队。我想要的是一种“射击和忘记,但在理性中信任”的方法。也就是说:

  • 我希望能够将消息发送到总线并立即返回(因此用户无需等待
  • 我希望将消息汇集到本地(缓冲?批处理?),以便系统在给定的时间段内一次发送1,5,50。所以“当缓冲区> 10秒或5秒后发送
  • 缓冲区被分页到磁盘,这样如果系统重新启动,它会尝试再次传送
  • 如果一切都失败了,那就好了。

我觉得我已经阅读过关于QueueClient中缓冲/批处理的内容,但现在我找不到任何关于它的内容。在Web应用程序中跨线程(请求)重用QueueClients是否安全?

有没有人有建议的模式或框架来实现上述目标?

目前,我正在缓存一个静态变量(_client)中的共享QueueClient - 这可能是不正确的。我应该缓存并重用客户端或工厂吗?

private static QueueClient GetQueueClient()
    {
        if (_client == null || _client.IsClosed)
        {
            // Create management credentials
            TokenProvider credentials = TokenProvider.CreateSharedSecretTokenProvider(
                Settings.ServiceBusIssuer, 
                Settings.ServiceBusIssuerKey);

            //create the client object for the queue
            MessagingFactory factory = MessagingFactory.Create(ServiceBusEnvironment.CreateServiceUri("sb", "Magic", string.Empty), credentials);

            string queueName = Crelate.Properties.Settings.Default.ServiceBusQueueName;
            QueueClient client = factory.CreateQueueClient(queueName);
            _client = client;

            return client;
        }

        return _client;
    }

然后我这样做,这似乎不是我想要的:

QueueClient client = GetQueueClient();
BrokeredMessage msg = new BrokeredMessage(opInfo);
msg.MessageId = "SomeUsefulId";
await Task.Factory.FromAsync(client.BeginSend, client.EndSend, msg, null);

感谢您的时间和想法。

当然,在写完这些之后,我发现了以下内容:

http://msdn.microsoft.com/en-us/library/hh528527.aspx(提到客户端批处理和重试逻辑)

0 个答案:

没有答案