我很难在Google上获得好评。我有一个Web应用程序,它使用QueueClient在用户创建记录时对消息进行排队。我想要的是一种“射击和忘记,但在理性中信任”的方法。也就是说:
我觉得我已经阅读过关于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(提到客户端批处理和重试逻辑)