在一条消息中将多个元素添加到 Azure 队列

Nat*_*per 6 c# cloud azure

我正在与AzureStorageAccount与 此 msdn 示例中CloudQueueClient描述的方式类似的方式进行交互

CloudStorageAccount storageAccount = CloudStorageAccount.Parse("some connection string");
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
Run Code Online (Sandbox Code Playgroud)

并将元素添加到队列(删除一些样板):

var queue = queueClient.GetQueueReference("queuename");
var message = new CloudQueueMessage("myString");
queue.AddMessageAsync(message);
Run Code Online (Sandbox Code Playgroud)

所以这意味着我可以将“myString”添加到我的队列中。伟大的。如果我反复调用这些代码行,我可以多次添加“mystring”。也不错,但效率低下。

如何在一条消息中将多个项目添加到队列中?

我对此进行了一些研究,发现了Entity Group Transactions,这可能是一个合适的选择。但是,这看起来与我一直在做的事情大不相同,并没有真正给我任何代码示例。有什么方法可以使用它并继续使用 Microsoft.WindowsAzure.StorageClientlibary 来构建我的消息吗?

Vla*_*hek -2

我相信没有真正需要在一条消息中将多个项目添加到队列中,因为最佳实践是使消息和相应的消息处理程序尽可能小。

这里很难谈论低效率。但是,当消息数量增长到真正影响性能时,您可以使用该BatchFlushInterval属性来批处理消息。否则,请遵循使用服务总线代理消息传递提高性能的最佳实践

更新:

通过在列表中自行批处理消息,您至少需要解决以下问题,这些问题可能会导致解决方案难以管理:

  • 跟踪消息的大小,以免超过最大消息大小限制
  • 找到放弃、完成特定消息并将其移至死信队列的方法
  • 自己实施批处理策略
  • 跟踪大消息处理时间并在花费太长时间时实施锁定

PS如果您能概述问题的目的,那么可能会找到更好的解决方案。

  • 这不适用于 Azure 存储队列服务。 (2认同)