我正在与AzureStorageAccount与CloudQueueClient进行类似于此msdn示例中描述的方式的交互
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("some connection string");
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();并在队列中添加一个元素(去掉一些锅炉板):
var queue = queueClient.GetQueueReference("queuename");
var message = new CloudQueueMessage("myString");
queue.AddMessageAsync(message);因此,这意味着我可以在队列中添加"myString“。太棒了。如果我反复调用这些代码行,我可以添加大量的时间"mystring“。也不错,但效率很低。
如何在一条消息中向队列中添加多个项?
我对此做了一些研究,发现了实体组事务,这可能是一个合适的选择。但是,这看起来与我所做的非常不同,并且没有给我任何代码示例。Microsoft.WindowsAzure.StorageClient 是否有任何方法来使用它并继续使用 libary来构造我的消息?
发布于 2014-05-15 11:47:07
我认为没有必要在一条消息中向队列中添加多个项,因为最佳实践是保持消息和相应的消息处理程序尽可能小。
在这里很难谈论效率低下的问题。但是,当消息数量增加从而真正影响性能时,就可以使用BatchFlushInterval属性对消息进行批处理。否则遵循使用服务总线代理消息提高性能的最佳实践
更新:
通过自己在列表中分批处理消息,您至少需要解决以下可能导致无法管理的解决方案的问题:
PS如果你能勾勒出你问题的目的,那么可能会找到一个更好的解决方案。
发布于 2014-05-15 13:11:20
发送多条消息的一种方法是构建包含单个字符串值(或对象)列表的包装类,例如将其序列化为JSon对象,并将其作为消息的有效负载发送。这里的问题是,取决于对象的大小,您最终可能会超过消息的大小限制。所以这不是一种推荐的植入。
在某种程度上,我正在处理一个需要每秒发送大量消息的系统;它是大规模分布的。我们没有批处理多条消息,而是跨多个存储帐户创建了一个消息队列碎片。可伸缩性需求驱使我们采用这种实现方式。
请记住,为了避免往返,“银河”和“Chatty”适用于发送更多的信息,以便优化性能。消息队列与其说是关于性能,不如说是关于信息的可伸缩性和分布。换句话说,最终的一致性和分布式扩展是在这种环境中所青睐的模式。我不是说你应该忽略粗壮的和喋喋不休的,但是你应该把它应用到有意义的地方。
例如,如果您需要每秒发送100万条消息,则分批调用是一种选择;分片是另一种选择。我通常支持分片,因为可伸缩性边界较少。但在某些情况下,如果问题足够简单,分块可能就足够了。
https://stackoverflow.com/questions/23677078
复制相似问题