首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在单个消息中向Azure队列添加多个元素

在单个消息中向Azure队列添加多个元素
EN

Stack Overflow用户
提问于 2014-05-15 11:36:13
回答 2查看 5.8K关注 0票数 6

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

代码语言:javascript
复制
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("some connection string");
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

并在队列中添加一个元素(去掉一些锅炉板):

代码语言:javascript
复制
var queue = queueClient.GetQueueReference("queuename");
var message = new CloudQueueMessage("myString");
queue.AddMessageAsync(message);

因此,这意味着我可以在队列中添加"myString“。太棒了。如果我反复调用这些代码行,我可以添加大量的时间"mystring“。也不错,但效率很低。

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

我对此做了一些研究,发现了实体组事务,这可能是一个合适的选择。但是,这看起来与我所做的非常不同,并且没有给我任何代码示例。Microsoft.WindowsAzure.StorageClient 是否有任何方法来使用它并继续使用 libary来构造我的消息?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-15 11:47:07

我认为没有必要在一条消息中向队列中添加多个项,因为最佳实践是保持消息和相应的消息处理程序尽可能小。

在这里很难谈论效率低下的问题。但是,当消息数量增加从而真正影响性能时,就可以使用BatchFlushInterval属性对消息进行批处理。否则遵循使用服务总线代理消息提高性能的最佳实践

更新:

通过自己在列表中分批处理消息,您至少需要解决以下可能导致无法管理的解决方案的问题:

  • 跟踪邮件大小,以便不超过最大邮件大小限制。
  • 找到放弃、完成特定消息并将其移动到死信队列的方法。
  • 自己实施分批策略
  • 跟踪大型消息处理时间,如果需要太长时间,则实现锁定

PS如果你能勾勒出你问题的目的,那么可能会找到一个更好的解决方案。

票数 0
EN

Stack Overflow用户

发布于 2014-05-15 13:11:20

发送多条消息的一种方法是构建包含单个字符串值(或对象)列表的包装类,例如将其序列化为JSon对象,并将其作为消息的有效负载发送。这里的问题是,取决于对象的大小,您最终可能会超过消息的大小限制。所以这不是一种推荐的植入。

在某种程度上,我正在处理一个需要每秒发送大量消息的系统;它是大规模分布的。我们没有批处理多条消息,而是跨多个存储帐户创建了一个消息队列碎片。可伸缩性需求驱使我们采用这种实现方式。

请记住,为了避免往返,“银河”和“Chatty”适用于发送更多的信息,以便优化性能。消息队列与其说是关于性能,不如说是关于信息的可伸缩性和分布。换句话说,最终的一致性和分布式扩展是在这种环境中所青睐的模式。我不是说你应该忽略粗壮的和喋喋不休的,但是你应该把它应用到有意义的地方。

例如,如果您需要每秒发送100万条消息,则分批调用是一种选择;分片是另一种选择。我通常支持分片,因为可伸缩性边界较少。但在某些情况下,如果问题足够简单,分块可能就足够了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23677078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档