C# Azure服务总线队列客户端性能
在这个问题上,我很难从谷歌获得好的点击率。我有一个web应用程序,它利用QueueClient在用户创建记录时对消息进行排队。我想要的是一种“点燃并遗忘,但理智中信任”的方式。也就是说:C# Azure服务总线队列客户端性能,c#,azure,azureservicebus,C#,Azure,Azureservicebus,在这个问题上,我很难从谷歌获得好的点击率。我有一个web应用程序,它利用QueueClient在用户创建记录时对消息进行排队。我想要的是一种“点燃并遗忘,但理智中信任”的方式。也就是说: 我希望能够向总线发送消息并立即返回(这样用户就不必等待) 我希望消息在本地汇集(缓冲?批处理?),以便系统在给定的时间段内一次发送1,5,50条消息。因此,“当缓冲时间超过10秒或5秒时发送” 缓冲区被分页到磁盘,这样,如果系统重新启动或其他什么,它将再次尝试传递 如果其他一切都失败了,那好吧 我觉得我已经
- 我希望能够向总线发送消息并立即返回(这样用户就不必等待)
- 我希望消息在本地汇集(缓冲?批处理?),以便系统在给定的时间段内一次发送1,5,50条消息。因此,“当缓冲时间超过10秒或5秒时发送”
- 缓冲区被分页到磁盘,这样,如果系统重新启动或其他什么,它将再次尝试传递
- 如果其他一切都失败了,那好吧
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);
谢谢你的时间和想法
当然,在写了所有这些之后,我发现了以下几点:
(其中提到了客户端批处理和重试逻辑)客户端批处理确实将是我的答案。很好,我仍然希望有一种真正可靠的方式来信任客户端批处理。理想情况下,我希望fire和forget。